自动检查LINQ查询的NULL关系

时间:2012-02-27 11:20:09

标签: c# linq linq-to-sql

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

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

- Company
- Product
- Item
- Order

并假设Company有0个或更多ProductsProduct有0个或更多个Items,而Item有0个或更多个Orders {1}}。

现在让我这样获得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(否则我会得到一个例外)。所以我做了类似的事情:

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

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

现在可以了

public class HelloWorld {
    public static void main(String []args) {
        System.out.println(2.0/0); //Infinity
        System.out.println(2/0); //java.lang.ArithmeticException: / by zero
    }
}