在下面的OUTER JOIN LINQ查询中,如果右侧行为null,则在Where
子句中获取null异常(如果c.CustomerID与外部联接中的ord.CustomerID不匹配)。 问题:如果以下Where clause
注意中的ord.price为空,我该如何处理此案例:price是int?
类型的可为空的列。
Query1 = from c in Customers
join ord in Orders on c.CustomerId equals ord.CustomerId into cord
from t in cord.DefaultIfEmpty()
where t.price = null || t.price > 100
select new {CustName = c.Name, OrderID = (t == null ? 0 : t.OrderId)};
更新:
对不起,where子句中有拼写错误。
t.price
而不是 ord.price
Where
条款中缺少一个条款。我已将其更正为:where t.price = null || t.price > 100
。但现在我收到了错误:operator || cannot be applied to operands of type '<null>' and 'int'
答案 0 :(得分:4)
你可以这样做:
Query1 = from c in Customers
join ord in Orders on c.CustomerId equals ord.CustomerId into cord
from t in cord.DefaultIfEmpty()
where (ord.price ?? 0) > 100
select new {CustName = c.Name, OrderID = (t == null ? 0 : t.OrderId)};
答案 1 :(得分:0)
那里有语法问题:
where t.price = null || t.price > 100
应该是:
where t.price == null || t.price > 100
请注意: ==
正在发生的事情是您指定的t.price = null
结果为null
。
所以它有效地解析null || t.price > 100
这就是编译器给你的原因:
运营商||不能应用于'&lt; null&gt;'类型的操作数和'int'