c# - 使用 LINQ 查询自动检查 NULL 关系

标签 c# linq linq-to-sql

我正在使用 LINQ to SQL 来处理我正在处理的应用程序的数据库查询。

为了这个例子的目的,假设我有一些像这样的表

- Company
- Product
- Item
- Order

假设一个 Company 有 0 个或多个 Products,一个 Product 有 0 个或多个 Items,并且 Item 有 0 个或多个 Orders

现在让我获得一个 Orders 列表,类似于:

IQueryable<Order> myOrders = GetMyOrders();

现在假设我想查询特定 Company.Name 的订单,但有一种情况,每个表的父 ID 可以是 NULL(我知道这不我的示例数据似乎合乎逻辑,但这只是一个示例)

假设没有 NULL 父 ID,我可以这样做:

var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");

这会工作正常,但是,因为可能有 NULL 父 ID 值,我需要检查每个父对象以确保它在查询下一个之前不为 null parent (否则我会得到一个异常(exception))。所以我做了类似的事情:

var filteredOrders = myOrders.Where(x => 
    x.Item != null &&
    x.Item.Product != null &&
    x.Item.Product.Company != null &&
    x.Item.Product.Company.Name == "Company1");

那么我的问题:是否有比必须包括所有 null 检查更好的方法(在可读性和易于编码方面)来做到这一点?在此过程中发现的任何无效 parent 都应从结果列表中排除。

请不要建议防止空 parent ,数据库不会改变(无论如何都是完全有效的)

最佳答案

有已知的模式(参见空对象模式)。您也可以阅读 this article

关于c# - 使用 LINQ 查询自动检查 NULL 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9464134/

相关文章:

c# - listview C# 按特定列排序

c# - Wcf事务

c# - 如何正确使用 LINQ 和 MySQL?

linq-to-sql - ASP.NET MVC 2 + LINQ to SQL - CS0012 编译错误

c# - 对从 Linq2Sql 的 var 中获取 int 感到困惑

c# - Windows 开始键的 Sendkeys

c# - 如何将 C# 数组传递到 QuantumSimulator Run() 命令中的 Q# 操作?

Linq GroupBy 如果它们被其他键分隔,则不合并具有相同键的分组

C# 数据表 LINQ 动态 row.field<datatype> 需要编码

c# - Visual Studio 代码分析规则 - "Do not expose generic lists"