LINQ子列表<>有时返回"NULL"

本文关键字:quot 返回 NULL 列表 LINQ | 更新日期: 2023-09-27 18:13:28

我有一个LINQ查询,其中有一个子列表,有时可以返回没有返回,但是无法获得实际的null而不是错误。如有任何帮助,我将不胜感激。

        var member_settings = from ml in _pMetaLanguages
                     join s in _settings
                     on ml.id equals s.setting_type_id
                              orderby ml.name descending
                     select new _class {
                         group_name = ml.name
                         , code = (ml.classes.Where(c => c.id == s.int_value)).FirstOrDefault().code
                         , name = (ml.classes.Where(c => c.id == s.int_value)).FirstOrDefault().name
                         , id = (ml.classes.Where(c => c.id == s.int_value)).FirstOrDefault().id
                         ,
                         classUI = ml.metadataMUI
                         ,
                         nameUI = ml.metadataMUI.Where(u => u.language_type_id.Equals(list_language_id))
                           .Select(i => new pMetaClasses
                           {
                               name = i.classes.Where(y => (y.bound_id.Equals(list_language_id))).FirstOrDefault().name
                           }).FirstOrDefault().name
                         , setting_type_id = s.setting_type_id
                         , int_value = s.int_value 
                     };

编辑

这部分给出了问题

nameUI = ml.metadataMUI.Where(u => u.language_type_id.Equals(list_language_id))
                       .Select(i => new pMetaClasses
                       {
                           name = i.classes.Where(y => (y.bound_id.Equals(list_language_id))).FirstOrDefault().name
                       }).FirstOrDefault().name

"metadataMUI"有时有记录,但并非总是如此,当没有记录时,它应该是空的(至少没有错误…

LINQ子列表<>有时返回"NULL"

您有一个对象集合,它可能为空,也可能不为空。您希望从该集合中的第一个项目(如果有)中取出一个属性。目前,当你的查询遇到这个问题时,你使用的一般方法是:

sequence.FirstOrDefault().SomeMember

如果序列总是包含一个项,则此代码可以正常工作。如果它可能是空的,它就不起作用。(除非您能够并且希望获得默认值的成员。对于引用类型,正如您正在使用的,这只会导致null引用异常。)幸运的是,有一个简单的转换可以确保它正确工作。只需使用Select将序列转换为您感兴趣的子属性,然后然后获得该序列的第一个值或默认值:

sequence.Select(item => item.SomeMember).FirstOrDefault();

无论是否有项,都将正常工作。使用这种方法永远不会对默认值调用投影。

当然,您在很多地方都这样做,所以您需要在整个查询中进行此转换。

相关文章: