2009-06-23 6 views
2

레코드가 존재하지 않으면 주어진 행 이름에 대해 정수 ID를 선택할 때 LINQ to Entities는 무엇을 반환합니까?

다음 코드는 다음과 같습니다.

string name = "myName"; 

int id = (int)_myDB.ThingTable.Where(thing => thing.ThingName == name) 
        .Select(thing => thing.ThingId); 

System.Linq.IQueryable을 int로 변환 할 수 없다는 오류가 있습니다 (행을 찾을 수없는 경우로 끝나지 않는다고 가정합니다. id가 리턴되지 않음)

먼저, 어떻게 그것을 int로 변환 할 수 있습니까?

둘째, ThingName == 이름을 가진 레코드가 없으면 무엇이 반환됩니까?

고마워요,
매트

답변

3

당신은 스칼라를 반환하는 쿼리 식을 필요로한다. 뭔가 같이 : 당신의 예에서

myCollection.Where(c => c.X > 0).FirstOrDefault(); 

이 될 것이다 : 어떤 행이 반환되지 않습니다

int id = (int)_myDB.ThingTable.Where(thing => thing.ThingName == name) 
       .Select(thing => thing.ThingId).FirstOrDefault(); 

경우, 스칼라의 기본 값이 nullable이 아닌 수의 경우 일반적으로 (영 반환).

0

그런 검색어에 FirstOrDefault()를 사용해보세요. 아무 것도 반환되지 않으면 선택 항목의 기본값을 반환합니다. 숫자의 경우 0, 객체의 경우 null