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)
所以我的问题是:除了必须包含所有空检查之外,还有更好的方法(在可读性和编码的简易性方面)吗?在此过程中发现的任何空父项都应导致从结果列表中排除.
请不要阻止空父母的建议,数据库不会改变(无论如何都是完全有效的)
现在你可以做
var filteredOrders = myOrders.Where(x =>
x.Item?.Product?.Company?.Name == "Company1");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1653 次 |
| 最近记录: |