C# LINQ中的空校验器

C# LINQ中的空校验器,c#,linq,C#,Linq,我有resData对象,该对象具有Courses列表项和Error属性。我已经检查了所有课程列表项错误属性,所有属性都是null 但是,当我签入以下内容时,它返回true 我想知道我错过了什么 if(resData.Courses.Select(x => x.Error != null && x.Error.Length > 0).Count() > 0) { Console.WriteLine("Error"); } 这是因为您使用的是选择,您是在投影

我有
resData
对象,该对象具有
Courses
列表项和
Error
属性。我已经检查了所有
课程
列表项
错误
属性,所有属性都是
null

但是,当我签入以下内容时,它返回
true

我想知道我错过了什么

if(resData.Courses.Select(x => x.Error != null && x.Error.Length > 0).Count() > 0)
{
   Console.WriteLine("Error");
}

这是因为您使用的是
选择
,您是在投影集合,而不是应用条件,您应该使用
Where
,或者使用
Count
重载方法:

if(resData.Courses.Count(x => x.Error != null && x.Error.Length > 0) > 0)
正如@Chris指出的,最好使用
Any
来避免枚举整个列表:

if(resData.Courses.Any(x => x.Error != null && x.Error.Length > 0))

这是因为您使用的是
选择
,您是在投影集合,而不是应用条件,您应该使用
Where
,或者使用
Count
重载方法:

if(resData.Courses.Count(x => x.Error != null && x.Error.Length > 0) > 0)
正如@Chris指出的,最好使用
Any
来避免枚举整个列表:

if(resData.Courses.Any(x => x.Error != null && x.Error.Length > 0))

仅供参考,这可以替换为:
resData.Courses.Any(x=>x.Error!=null&&x.Error.Length>0)
或更简单的C#6>
resData.Courses.Any(x=>x.Error?.Length>0)
或甚至
resData.Courses.Any(x=>!string.IsNullOrEmpty(x.Error))
假设
错误
字符串
@juharr好眼力,我假设它不是字符串string@juharr-在使用LINQ与DB交互时,必须小心使用LINQ中的方法(如LINQ到SQL或EF代码)
string.IsNullOrEmpty
无法转换为SQL,您会收到错误信息。仅供参考,这可以替换为:
resData.Courses.Any(x=>x.Error!=null&&x.Error.Length>0)
或更简单的C#6>
resData.Courses.Any(x=>x.Error?.Length>0)
或甚至
resData.Courses.Any(x=>!string.IsNullOrEmpty(x.Error))
假设
Error
字符串
@juharr好眼力,我假设它不是string@juharr-在使用LINQ与DB交互时,必须小心使用LINQ中的方法(如LINQ到SQL或EF代码).
string.IsNullOrEmpty
无法转换为SQL,您将收到错误信息。或者最好使用
Any
来避免对集合进行超出需要的任何进一步操作(
Where
Count
将麻烦地枚举整个列表).这是真的,伙计们,我要补充一点,我试图解释他/她的第一次遭遇的原因是的。我不是想暗示答案已经不好了(而且你已经有了我的+1来发现错误并解释它),只是觉得上面也可以有那个小樱桃。-)谢谢@Chris,高度赞赏或更好的做法是使用
Any
来避免对收集进行任何超出需要的进一步检查(
Where
Count
将麻烦地列举整个列表)。这是真的,伙计们,我要补充一点,我试图解释为什么他/她第一次出现这种情况。我不是想暗示答案已经不好了(而且你已经有了我的+1来发现错误并解释它),只是觉得上面可能也有一个小樱桃谢谢@Chris,非常感谢