我正在使用LINQ to SQL来处理我正在处理的应用程序的数据库查询。
出于本示例的目的,假设我有一些像这样的表
- Company
- Product
- Item
- Order
并假设Company
有0个或更多Products
,Product
有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");
所以我的问题:除了必须包含所有空检查之外,还有更好的方法(在可读性和编码方便性方面)吗?在此过程中找到的任何空父项都应导致从结果列表中排除。
请不要建议防止空父母,数据库不会改变(并且无论如何都是完全有效的)
答案 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
}
}