2009-07-14 85 views
1

是否可以使用LINQ来检索可能包含空值的列表。检索包含NULLS和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的是,空,14,空,11,16,17 }?

这并没有为我工作:

query.ToList<decimal?>(); 

这可能吗?

+0

你不解释你想要那些`null`对应的。没有订单的客户? – 2009-07-14 04:59:20

回答

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; 
3

问题是x.OrderId将抛出NullReferenceExceptionx为空。你需要检查空第一个,然后返回属性,如果有一个对象。例如

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

OrderId并不十分听起来像它应该是虽然小数...

+0

谢谢你!这一直困扰着我一段时间。欣赏你的答案。 – dan 2009-07-14 04:56:42

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); 
+0

select应该是select(sr!= null?sr.OrderId:null); – 2009-07-14 07:24:08