自动检查LINQ查询的NULL关系

mus*_*fan 11 c# linq linq-to-sql

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

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

- Company
- Product
- Item
- Order
Run Code Online (Sandbox Code Playgroud)

并且假设a Company有0或更多Products,a Product有0或更多Items,a Item有0或更多Orders.

现在让我这样获得一个列表Orders,例如:

IQueryable<Order> myOrders = GetMyOrders();
Run Code Online (Sandbox Code Playgroud)

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

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

var filteredOrders = myOrders.Where(x => x.Item.Product.Company.Name == "Company1");
Run Code Online (Sandbox Code Playgroud)

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

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

所以我的问题是:除了必须包含所有空检查之外,还有更好的方法(在可读性和编码的简易性方面)吗?在此过程中发现的任何空父项都应导致从结果列表中排除.

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

cod*_*key 1

现在你可以做

var filteredOrders = myOrders.Where(x => 
    x.Item?.Product?.Company?.Name == "Company1");
Run Code Online (Sandbox Code Playgroud)