2010-01-26 3 views
2

두 문에서 변수에 지정된 이름을 가진 Category의 ID를 가져 오려고합니다.어떤 LINQ 문이 더 좋고 그 이유가 무엇입니까?

두 가지 모두 정상적으로 작동합니다. 차이점은 무엇이며 어느 것이 더 낫습니까?

string name = "Progreammers"; 

var categoryID = from c in DataContext.Categories 
          where c.Name == name 
          select c.CategoryID; 

var categoryID = 
    DataContext.Categories.Single(c => c.Name == name).CategoryID; 

편집 : 하나 이름 (필드)이 테이블의 모든 카테고리 ID (필드)에 대한 있습니다.

+0

이 카테고리 ID의 타입이 샘플 코드에서 다를 수는 – Fredou

+0

는 DB에서이 BIGINT가, 있는지, 코드가 깁니다. 하지만 무슨 뜻인지 알 수가 없어? –

+1

내 뜻은 첫 번째는 IEnumerable 두 번째는 길다는 것입니다 – Fredou

답변

12

두 문은 서로 다른 기능을 수행합니다.

첫 번째 레코드는 여러 레코드를 반환 할 수 있습니다.

두 번째는 단일 CategoryID 만 반환합니다. 하나 이상의 레코드가 없으면 예외가 발생합니다.

다음 쿼리는 첫 번째 문에 해당하는 것 :

var categoryID = (from c in DataContext.Categories 
       where c.Name == name 
       select c.CategoryID).Single(); 

어느 방법, 일관성 아마입니다 :

var categoryID = DataContext.Categories.Where(c => c.Name == name).CategoryID; 

그리고 다음은 두 번째 문에 쿼리 구문과 동일 가장 중요합니다 (성능은 둘 다 같은 방식으로 실행되므로 서로 동등해야합니다). 쿼리 구문을 사용하는 경우 쿼리 구문을 사용하십시오. lambda expressions을 사용하려면 가능한 한 많이 사용하십시오.

+0

+1, 17 초 나보다 빠릅니다 :-) – Fredou

+0

또한 지정된 ID가있는 레코드가없는 경우 두 번째 던질 것이다. –

+0

첫 번째 문장에 해당하는 것에 대해 감사드립니다. => 표현식이없는 첫 번째 문장과 같은 것은 무엇입니까? 감사합니다. –

3

이들은 동일하지 않습니다.

일치하는 것이 많은 경우 첫 번째 것은 목록을 반환합니다.

두 번째 것은 하나만 반환합니다.

0

이미 언급했듯이 두 가지가 다르지만 "SQL"스타일과 "Lambda"스타일 LINQ 표현의 차이점이 있는지 묻는 것이 목적이라고 생각합니다. 그래서, 여기에 비슷한 질문이있는 경우

는 :

LINQ: Dot Notation vs Query Expression

+0

을 고맙게 생각합니까? –

+0

쿼리 구문은 실제로 컴파일러에서 람다 구문으로 변환되므로 두 문이 모두 똑같은 작업을 수행하도록 작성된 경우에만 동일합니다. –

관련 문제