我有一个包含以下列的表:
| FruitID | UserID | FruitName | ....
我正在寻找一个返回布尔值的查询:如果用户的水果没有被称为某个名称,则返回true;如果该名称已经在表中,则返回false
这就是我所拥有的:。
using (MyDC TheDC = new MyDC())
{
return TheDC.TheTable
.Where(l => l.UserID == TheUserID)
.Select(l => l.FruitName == TheFruitName ).Any();
}
要使此查询有效,我需要做什么?
感谢。
答案 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)