我有这个lambda表达式:
if (!myList.Any( x => x.name == "example" && x.articleNumber == "1"))
{
}
else
{
}
myList包含类中具有以下属性的对象:articleNumber,name和quantity。
这进入了if而不是在其他地方,而是有一个名为“example”和articleNumber“1”的对象。为什么会这样?
答案 0 :(得分:4)
你知道你的lamda之前的!
吗?
你在if语句中提出的是
如果myList不包含名称为example且文章编号为1的任何值
我不知道这是否有帮助,但如果您提供有关您希望通过该声明完成的内容的更多信息,则可能更容易回答。
答案 1 :(得分:1)
我很确定该列表不包含您认为它的条目。在if行上设置调试标记,并在该点检查列表以查看它包含的内容。您会发现该条目不存在。请记住,字符串也区分大小写,因此如果name确实是示例,则它将不匹配。
答案 2 :(得分:1)
我能看到的唯一原因是name=="example"
和articleNumber=="1"
没有元素。请注意,==
运算符在C#中区分大小写,并且某处可能存在空格。
然后,您可以使用此overload of Equals
来比较不区分大小写,并使用Trim
删除空格:
if (!myList.Any( x => x.name.Trim().Equals("example", StringComparison.OrdinalIgnoreCase)
&& x.articleNumber == "1"))
{
}
else
{
}
您还应该考虑将articleNumber
的类型更改为int
,因为它是一个数字。
答案 3 :(得分:1)
您的列表可能包含一些您不期望的值。
尝试将&&
替换为||
,看看会得到什么:
var v = myList.Where(x => x.name == "example" || x.articleNumber == "1").ToList();
只是为了看看那里有什么
答案 4 :(得分:0)
你的逻辑没有错,但你可以尝试?
if (myList.Where( x => x.name == "example").Where(x=> x.articleNumber == "1").Count() > 0)
{
}
else
{
}
或删除Casing中的所有空格和差异
if (!myList.Any( x => x.name.Trim().ToLower() == "example" && x.articleNumber.Trim().ToLower() == "1"))
{
}
else
{
}
答案 5 :(得分:-1)
Any的定义: 确定序列的任何元素是否存在或满足条件。
因此,对于序列中的每个元素,确定谓词是否与您的表达式匹配。
myList.Any( x => x.name == "example" && x.articleNumber == "1")
如果List的任何元素的名称为“example”且articleNumber为1,则返回true。
!myList.Any( x => x.name == "example" && x.articleNumber == "1")
如果List的NO元素名称为“example”且articleNumber为1,则返回true。