C# LINQ子列表有时返回“NULL”

C# LINQ子列表有时返回“NULL”,c#,linq,C#,Linq,我有一个LINQ查询,其中有一个子列表,它有时可以不返回任何返回,但是无法获得实际的null而不是错误。 在这方面的任何帮助都将受到感谢 var member_settings = from ml in _pMetaLanguages join s in _settings on ml.id equals s.setting_type_id

我有一个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有时有记录,但并非总是如此,当没有记录时,它应该为null至少没有错误…

您有一个对象集合,它可能是空的,也可能不是空的。如果存在属性,则需要从该集合中的第一项中提取属性。当前,每当您的查询遇到此问题时,您都会使用以下通用方法:

sequence.FirstOrDefault().SomeMember
如果序列始终包含项,则此代码可以正常工作。如果它可能是空的,它就不能工作。除非您可以并且希望获得默认值的成员。对于引用类型,正如您显然正在使用的那样,这只会导致空引用例外。幸运的是,有一个简单的转换来确保它正确工作。只需使用“选择”将序列转换为感兴趣的子属性,然后获取该序列的第一个或默认值:

sequence.Select(item => item.SomeMember).FirstOrDefault();
这将正常工作,无论是否有项目。使用这种方法,不会对默认值调用投影


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

什么子类在讨论?i、 上课?尝试按如下方式重写:name=i.classes==null?字符串。空:。顺便说一句,为什么要在一个查询中混合使用不同的LINQ符号?.FirstOrDefault不会在试图访问null-object的属性时将您从NullReferenceException中解救出来。如果您能展示一个简短但完整的示例,最好不要在行的开头使用逗号的奇怪布局,这将非常有帮助,并尽可能简化,同时仍能显示出问题所在。对不起,请理解它不清楚。。。nameUI=ml.metadataMUI.Whereu=>u.language\u type\u id.Equalslist\u language\u id.Selecti=>new pMetaClasses{name=i.classes.Wherey=>y.bound\u id.Equalslist\u language\u id.FirstOrDefault.name}.FirstOrDefault。name@xiaoy312,我注意到了,但可以设法避免空引用,有什么建议吗?搜索了整个下午,似乎只有我有这个问题