2010-04-30 3 views
3

(나는 "... 엔티티"를 괄호 안에 넣었습니다. 왜냐하면이게 전혀 문제가되는지 모르겠으니까요. 이건 상당히 일반적인 LINQ와 관련이 있습니다. 질문.)LINQ (엔티티)가있는 객체가 있는지 묻는 질문

개체가 데이터베이스에 있으면 LINQ (엔티티)로 확인하고 싶습니다. 현재 다음과 같은 작업을 수행하고 있습니다.

using (MyEntitiesContext aCtx = new MyEntitiesContext()) 
{ 
    var aQuery = from c 
       in aCtx.Client 
       where c.ClientID==1 
       select c; 

    Client aClient = aQuery.FirstOrDefault(); 

    bool Exists = (aClient!=null); 
    ... 
} 

그러나 잘못된 것이 아니라면 데이터베이스 (클라이언트가있는 경우)에서 전체 클라이언트 개체를로드합니다. 나는 실제로 존재하는지 아닌지에 관계없이 객체를로드하는 것에 관심이있다.

SQL에는 SELECT COUNT(*)... 구조가 있습니다. LINQ와 비슷한 뭔가가 있습니까?

조언 해 주셔서 감사합니다.

답변

7

하나의 옵션은 된 IQueryable의 Any 방법을 사용하는 것입니다. 지정한 조건과 일치하는 개체가 발견되었는지 여부를 나타내는 부울 값을 반환합니다.

using (MyEntitiesContext aCtx = new MyEntitiesContext()) 
{ 
    bool exists = (from c 
        in aCtx.Client 
        where c.ClientID==1 
        select c).Any(); 
} 

이 메서드는 true로 평가되는 즉시 실행을 중지합니다.

+0

을 컴팩트 좋다 그 표현, 감사합니다! – Slauma

0

당신은 시도 할 수 ...

using (MyEntitiesContext aCtx = new MyEntitiesContext()) 
{ 
    var aQuery = from c 
     in aCtx.Client 
     where c.ClientID==1 
     select c; 

    int total = aQuery.Count(); 

    bool Exists = (total > 0); 
    ... 
} 

안된 ...

+3

[절대 사용하지 마십시오'카운트()'당신은 의미 할 때 '모든()'(http://blogs.teamb.com/craigstuntz/2010/04/21/38598/) –

0

당신은이 결과를 반환 있는지 확인하는 쿼리에 백작() 연산자 또는 모든 연산자를 사용할 수 있습니다

using (MyEntitiesContext aCtx = new MyEntitiesContext()) 
{ 
    var aQuery = from c 
       in aCtx.Client 
       where c.ClientID==1 
       select c; 

    int count = aQuery.Count(); 

    bool Exists = (count > 0); 

    // or 
    Exists = aQuery.Any(); 

    ... 
} 
2

나는 그 존재를 결정하기 위해 Any()을 사용합니다. 다음과 같은 더미 인스턴스를 작성하는지 여부에 관계없이 컴파일러는 Exists 함수를 사용하여 SQL 문을 작성하므로 Select 문에있는 내용이 중요하지 않습니다.

var query= from c 
      in context.Client 
      where c.ClientID == 1 
      select new { Dummy = "foo" }; 

var exists = query.Any(); 
+0

흠,이 더미 객체가 없으면'Any()'메쏘드가 여전히 Client 객체를 데이터베이스에서 불러 오게할까요? – Slauma

+0

대답이 뭐라 할지라도 여기에는 "더미 인스턴스"가 없습니다. 표시된 코드는 인스턴스를 구체화하거나 인스턴스화하지 않습니다. 그것을 시도하고 볼; 위의 텍스트가 약간 오도 된 경우에도 코드가 올바르게 작동합니다. –

+0

OK, 이해합니다. 그렇다면'select c' 대신'select new {Dummy = "foo"}'를 써서 다른 답변을 제안 할 때 어떤 차이가 있습니까? – Slauma