使用Linq检索包含NULLS的列表

时间:2009-07-14 04:47:40

标签: linq list null left-join nullable

是否可以使用LINQ来检索可能包含空值的列表。

例如,如果我有这样的左外连接:

var query=  from c in db.Customers
                join o in db.Orders
                   on c.CustomerID equals o.CustomerID into sr
                from x in sr.DefaultIfEmpty()
                select x.OrderId;

如何找到类似{12,13,null,14,null,11,16,17}的列表?

这对我不起作用:

query.ToList<decimal?>(); 

有可能吗?

3 个答案:

答案 0 :(得分:3)

问题是x.OrderIdNullReferenceException为空时会抛出x。您需要检查null first ,然后返回属性(如果有对象)。例如

select x == null ? (decimal?)null : x.OrderId;

OrderId虽然听起来不应该是十进制的......

答案 1 :(得分:1)

lc是正确的,但是将你的选择直接转换为可以为空的类型会更简洁。

var query=  from c in db.Customers
                join o in db.Orders
                   on c.CustomerID equals o.CustomerID into sr
                from x in sr.DefaultIfEmpty()
                select (decimal?)x.OrderId;

答案 2 :(得分:0)

尝试:

var query
    = from c in db.Customers
        join o in db.Orders
        on c.CustomerID equals o.CustomerID into sr
        select (sr != null : sr.OrderId : null);