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,非常感谢