linq检查没有值匹配

时间:2014-01-22 16:37:28

标签: c# linq

我有一个包含以下列的表:

| FruitID | UserID | FruitName | ....

我正在寻找一个返回布尔值的查询:如果用户的水果没有被称为某个名称,则返回true;如果该名称已经在表中,则返回false

这就是我所拥有的:。

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

要使此查询有效,我需要做什么?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用.Any本身,我认为您的查询正好相反,在返回之前您还需要!,如果有则返回false。

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

答案 1 :(得分:2)

不带参数的

Any返回给定序列中是否包含任何元素,无论元素是什么。为了使它完成你所期望的那样(看看是否从你的选择中返回了任何true),你需要为它添加一个条件:

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

当然,您应该直接进行检查,而不是选择布尔值然后检查它们:

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

根据您的描述,这会返回与您想要的相反的内容:如果表中的不是,您希望它返回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)