2009-07-25 5 views
7

클래스가 "Employee"이며 IList <> "TypeOfWork"가 있습니다.값이 LINQ가 포함 된 컬렉션에 있는지 확인

public class Employee 
{ 
    public virtual IList<TypeOfWork> TypeOfWorks { get; set; } 
} 

public class TypeOfWork 
{ 
    public virtual Customer Customer { get; set; } 

    public virtual Guid Id { get; set; } 
    public virtual string Name{ get; set; } 
    public virtual bool IsActive{ get; set; } 
} 

저장하기 전에 "typeofwid"(Guid)가 이미 "TypeOfWorks"컬렉션에 있는지 알고 싶습니다.

나는이 시도 :

var res = from p in employee.TypeOfWorks 
      where p.Id == new Guid("11111111-1111-1111-1111-111111111111") 
      select p ; 

을이 시도 : 비주얼 스튜디오의 "직접 실행 창"에

bool res = employee.TypeOfWorks.Where(f => f.Id == new Guid("11111111-1111-1111-1111-111111111111")).Count() != 0; 

을하지만 오류가 나타납니다 : 쿼리를 포함 할 수 없습니다 표현은 모두을 연산 식 사례

아이디어가 있으십니까?

감사합니다.

답변

19

그냥 오류라고합니다. Lambda 함수를 컴파일해야하므로 LINQ 쿼리를 직접 실행 창에서 사용할 수 없습니다. 실제 코드에서 컴파일 할 수있는 첫 번째 줄을 시도하십시오. :) 또한

, 당신은 지금처럼 LINQ "모든"연산자를 사용할 수 있습니다,이 모두가 하나 개의 라인에서 수행 얻을 :

if(! employee.TypeOfWorks.Any(tow => tow.Id == theNewGUID)) 
    //save logic for TypeOfWork containing theNewGUID 
0

실제로 그 작업 중 하나를 생각합니다. Visual Studio는 조사 식 창에서 Linq 쿼리를 처리 할 수 ​​없으므로 내가 본 오류는 코드가 작동하지 않는 것보다 Visual Studio 문제가 더 많을 것으로 생각됩니다.

0

초기화되지 않은 유형의 계산을 얻으려면이 코드를 사용해보십시오.

if(employee.TypeOfWorks 
    .Count(f => f.Id != new Guid("11111111-1111-1111-1111-111111111111")) != 0) 
{ 
    //do something 
} 
1

방법

Guid guid = Guid.NewGuid("11111111-1111-1111-1111-111111111111"); 
var res = from p in employee.TypeOfWorks 
      where p.Id == guid 
      select p ; 

The problem is constructing the guid - otherwise the linq queries should work 

에 대한
관련 문제