Linq检查没有值匹配

wfauudbj  于 2023-04-27  发布在  其他
关注(0)|答案(2)|浏览(129)

我有一个表,其中包含以下列:

| FruitID | UserID | FruitName | ....

我想创建一个返回布尔值的查询:如果用户的水果没有一个被称为某个名称,则返回true;如果该名称已经在表中,则返回false
这就是我所拥有的:

using (MyDC TheDC = new MyDC())
{
    return TheDC.TheTable
                   .Where(l => l.UserID == TheUserID)
                   .Select(l => l.FruitName == TheFruitName ).Any();
}

我需要做些什么才能使此查询起作用?

pgx2nnw8

pgx2nnw81#

你可以使用.Any本身,我认为你的查询工作相反,你需要一个!也在返回之前返回false,如果有任何。

using (MyDC TheDC = new MyDC())
{
    return !TheDC.TheTable
                   .Any(l => l.UserID == TheUserID && l.LeadsheetName == TheLeadsheetName);           
}
m1m5dgzv

m1m5dgzv2#

不带参数的Any返回给定的序列中是否有任何元素,而不管元素是什么。为了使它像你期望的那样(看看你的select是否返回了任何true s),你需要给它添加一个条件:

.Select(l => l.FruitName == TheFruitName).Any(b => b)

当然,与其选择布尔值然后检查它们,你应该直接进行检查:

.Any(l => l.FruitName == TheFruitName)

根据您的描述,这将返回与您想要的相反的结果:如果true不在表中,则返回true。有两种写法是“NOT ANY TRUE”或“ALL FALSE”:
NOT ANY TRUE(注意表达式开头的!):

!TheDC.TheTable
    .Where(l => l.UserID == TheUserID)
    .Any(l => l.FruitName == TheFruitName)

全假:

TheDC.TheTable
    .Where(l => l.UserID == TheUserID)
    .All(l => l.FruitName != TheFruitName)

相关问题