2011-11-21 2 views
13

다음은 Vend의 값을 문자열로 반환하지 않는 이유가 확실하지 않습니다. 내가 팔고 다니다의 값을 확인하면 는 말한다 : System.Data.Objects.ObjectQuery``1[System.String]문자열을 반환하는 Linq

 string vend = (from vnd in db.Vendors 
      where vnd.VendorID == id 
      select vnd.VendorName).ToString(); 

내가 팔고 다니다의 값을 볼 때, 그것은 당신이 쿼리에서 당신은 되돌려 IQueryable<String>을 받고

+0

당신은 판매 유형을보고 있습니까? – zmbq

답변

29

을 기대했던 없습니다. VendorName이 String 인 경우

string vend = (from vnd in db.Vendors 
     where vnd.VendorID == id 
     select vnd.VendorName).First().ToString(); 

ToString이 필요로하지 않는 : 당신이 중 첫 번째 또는 단일 또는 뭔가가 필요합니다.

string vend = db.Vendors.Single(vnd => vnd.VendorID == id); // more terse 

First은 세트에서 첫 번째 레코드를 잡아되고 세트가 비어있는 경우 예외가 발생합니다.

FirstOrDefault은 예상되는 유형에 대한 첫 번째 레코드 또는 기본값을 반환하며 아무 예외도 반환하지 않습니다.

Single은 집합의 첫 번째 레코드를 반환하지만 집합에 둘 이상의 레코드가 있거나 집합이 비어 있으면 예외가 throw됩니다.

SingleOrDefault은 비어있는 경우 집합의 첫 번째 레코드 또는 형식의 기본값을 반환하지만 집합에 둘 이상의 레코드가있는 경우 예외를 throw합니다.

+0

나는 이것을 항상 잊는다. 간결한 설명 주셔서 감사합니다! – sparkyShorts

5

쿼리 결과가 아니라 쿼리 자체에서 ToString()을 호출하고 있습니다. 이것은 이미 문자열이어야한다 쿼리의 첫 번째 결과를 얻을 수

string vend = (from vnd in db.Vendors 
where vnd.VendorID == id 
select vnd.VendorName).First(); 

시도 (VendorName을 가정 할 문자열입니다). 따라서 ToString()을 호출 할 필요가 없습니다.

관련 문제