我正在使用 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/