【问题标题】:Linq to SQL check for null on object before accessing propertyLinq to SQL 在访问属性之前检查对象是否为空
【发布时间】:2019-06-14 16:11:24
【问题描述】:

简单来说,我的代码有更好的方法吗? (检查下面的代码)。

详情:
在 LINQ to SQL 中,我有一个包含一些内部查询的查询。在那个内部查询中我使用了 FirstOrDefault() 所以现在我想检查 FirstOrDefault() 是否返回任何空值然后我可以访问属性。

var Bills = db.BillMasters.Select(x => new BillHomeViewModel {
            ConsumerCategory = db.ConsumerCategories.FirstOrDefault(c => c.ID == x.ConsumerCategory) == null ? String.Empty : db.ConsumerCategories.FirstOrDefault(c => c.ID == x.ConsumerCategory).CategoryName                
        });

【问题讨论】:

    标签: c# entity-framework linq


    【解决方案1】:

    你可以使用DefaultIfEmpty来避免实体框架不支持的三元运算符

    var Bills = db.BillMasters
    .Select(x => new BillHomeViewModel
    {
        ConsumerCategory = db.ConsumerCategories
            .Where(c => c.ID == x.ConsumerCategory)
            .Select(c => c.CategoryName)
            .DefaultIfEmpty("")
            .FirstOrDefault()
    });
    

    【讨论】:

    • linq-to-sql。在这种情况下不支持 First()。 DefaultIfEmpty 工作完美,只有 FirstOrDefault() 工作
    • 奇怪,因为文档说支持First(好吧,不支持列表中没有提到)并且不支持DefaultIfEmpty(arg)。我无法检查。但由于文档是 2011 年的,它们可能已经过时了
    • 发生错误:方法“First”只能用作最终查询操作。请考虑在此实例中使用“FirstOrDefault”方法。最后不得不使用 FirstOrDefault() 。现在可以了
    • @AshranHaider 您应该将其更新为 FirstOrDefalut(),请查看答案
    • @Ksv3n 是的,我做到了,因为在该错误消息中很明显。我只是在 cmets 中告诉它,以便人们知道这个错误。
    猜你喜欢
    • 2017-01-05
    • 1970-01-01
    • 2014-08-22
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多