【问题标题】:Retrieve a list containing NULLS with Linq使用 Linq 检索包含 NULLS 的列表
【发布时间】:2009-07-14 04:47:40
【问题描述】:

是否可以使用 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?>(); 

有可能吗?

【问题讨论】:

  • 您没有解释您希望那些nulls 对应的内容。没有订单的客户?

标签: linq list null left-join nullable


【解决方案1】:

问题是x.OrderId 会在x 为空时抛出NullReferenceException。您需要先检查 null ,如果有对象则返回该属性。例如

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

OrderId 听起来不太像它应该是小数...

【讨论】:

  • 谢谢!这让我难倒了一段时间。感谢您的回答。
【解决方案2】:

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】:

    试试:

    变量查询 = 来自 db.Customers 中的 c 在 db.Orders 中加入 o 上 c.CustomerID 等于 o.CustomerID 到 sr 选择(sr!= null:sr.OrderId:null);

    【讨论】:

    • select 应该是 select (sr != null ? sr.OrderId : null);
    猜你喜欢
    • 1970-01-01
    • 2019-01-07
    • 2023-04-10
    • 2021-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-23
    相关资源
    最近更新 更多