2014-01-22 54 views
0

我有了如下的表:LINQ检查没有价值相匹配

| FruitID | UserID | FruitName | .... 

我希望创建一个返回boolean值的查询:如果没有用户的水果被称为某名称,如果名称已在表中,则返回false

这就是我所拥有的:。

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

我需要做些什么来使这个查询工作?

谢谢。

+0

它不工作吗?它出什么问题了? –

+0

你在哪里比较'FruitName'? – Habib

+0

@SamIam:如果找到一个,它需要返回false – frenchie

回答

2

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

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

Any不带参数返回给定的序列是否有任何元素,无论什么样的元素。为了让你似乎指望它(看看您的选择返回了任何true S)是什么,你需要一个条件添加到它:

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

当然,而不是选择布尔值,然后检查他们,你应该只是做检查直接:

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

根据你的描述,这将返回你想要什么,虽然对面:你希望它返回true如果是表中未。两种方法编写“不是任何真正的”或“全是假的”:

又没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)