2010-12-08 6 views
0

나는이 두 구문의 차이를 알고 싶습니다 :첫 번째 항목을 선택해야 할 때 Where (lambda expr.)와 First (lambda expr.)의 차이점은 무엇입니까?

return db.Contacts.First(x => x.ContactID == id) 

을 내가 "시퀀스에 요소 포함되어 있지 않습니다"오류를 얻을 때까지 내가 지금까지 사용하고있다. 그 때 나는 아래의 것을 다시 사용해야한다.

return db.Contacts.Where(x => x.ContactID == id).First(); 

뉘앙스가 있어야합니다. 제대로되지 않습니다.

도와 주셔서 감사합니다.

답변

2

First은 시퀀스의 첫 번째 요소를 가져 오는 데 사용되지만 IEnumerable 시퀀스를 필터링 할 수있는 조건을 사용합니다.

따라서 First은 하나 이상의 결과가있는 IEnumerable의 첫 번째 요소를 반환합니다.

First(Predicate)은 하나 이상의 결과가있는 IEnumerable에서 결과의 첫 번째 요소를 반환합니다.

First을 사용할 때 0 개의 요소가있는 경우 시퀀스에는 요소가 포함되어 있지 않습니다.. 결과가 0 일 것으로 예상되는 경우 FirstOrDefault을 사용해야합니다. FirstOrDefault 또한,뿐만 아니라 술어를 취할 수 있습니다 즉

// Will return null if there are no elements with a matching contact Id 
return db.Contacts.FirstOrDefault(x => x.ContactID == id); 
+0

왜 먼저 한 결과 이상을 반환? – Richard77

+0

@ Richard77 - 처음에는 1 개 이상의 결과를 반환하지 않습니다. 항상 1 개의 결과를 반환합니다. – GenericTypeTea

+0

나는 당신의 대답을 잘 읽지 못해 죄송합니다. 감사 – Richard77