2014-01-22 5 views
0

I가 다음과 같은 열이있는 테이블 :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(); 
} 

이 쿼리를 수행하려면 무엇을해야합니까?

감사합니다.

+0

아직 작동하지 않습니까? 그게 뭐가 잘못 됐니? –

+0

'FruitName'은 어디에서 비교하고 있습니까? – Habib

+0

@SamIam : 발견되면 거짓을 반환해야합니다. – frenchie

답변

2

당신은 .Any 자체를 사용할 수 있습니다. 그리고 나는 당신의 쿼리가 반대로 작동한다고 생각합니다. 리턴이 있기 전에 반환하기 전에 또한 !이 필요합니다.

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

Any 매개 변수없이 요소가 무엇인지에 관계없이 지정된 시퀀스에 요소가 있는지 여부를 반환합니다. 당신이 (어떤 true의 당신의 선택에서 반환 된 경우 참조) 그것을 기대하는 것 무엇을 할 수 있도록하기 위해, 당신은에 조건을 추가해야합니다 :

.Select(l => l.FruitName == TheFruitName).Any(b => b) 
대신 논리 값을 선택 물론

다음 이를 확인하는 것은, 당신은 직접 확인을 수행해야합니다 귀하의 설명에 따르면

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

, 이것은 당신이 비록 원하는의 반대를 반환 : 당신은 테이블에 하지 경우가 true을 반환합니다. "어떤 사실이 아니다"또는 "ALL FALSE"것을 쓸 수있는 두 가지 방법 :

NOT (식의 시작 부분에 ! 통지) ANY TRUE : ALL FALSE

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

:

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