2010-01-20 3 views
4
내가 IList의 반환하려면 다음 코드를 사용하고

:Linq에 변환

유형의 개체를 캐스팅 할 수 없습니다 'System.Collections.Generic.List 1[<>f__AnonymousType0 1 :

public IList<string> FindCodesByCountry(string country) 
     { 
      var query = from q in session.Linq<Store>() 
         where q.Country == country 
         orderby q.Code 
         select new {q.Code}; 

      return (IList<string>) query.ToList(); 
     } 

을이 오류가 계속하지만 [System.String]] '을 입력하여'System.Collections.Generic.IList`1 [System.String] '을 입력하십시오.

여기로 돌아 가기로되어 있습니까?

답변

4

을 한 q.code 문자열이기 때문에이 작동합니다 : 그것은 익명 객체를 생성하지 않는 것을 메모를 그냥 문자열을 선택하고있다.

public IList<string> FindCodesByCountry(string country) 
    { 
     var query = from q in session.Linq<Store>() 
        where q.Country == country 
        orderby q.Code 
        select q.Code; 

     return query.ToList(); 
    } 
+0

오우 ..... 나는 그것을 놓쳤다는 것을 확신하지 못했다 ... 나는 ** ** ** 연산자를 사용하여 단일 열을 반환한다고 생각했다. – vikasde

0

이 시도 :

return query.ToList<string>(); 
2

익명 형식을 선택하는 이유가 있습니까? 하지 않으면 것은

var query = from q in session.Linq<Store>() 
       where q.Country == country 
       orderby q.Code 
       select q.Code; 
1

어떻게

query.Select(s => s.ToString()).ToList(); 

또는

query.Cast<String>().ToList(); 

에 대해하지만 q.Code 문자열입니다 있으리라 믿고있어 ...이 시도? 단지 문자열 자체를 선택하는 대신 문자열을 포함하는 익명의 클래스를 선택하는 쿼리에서

var query = from q in session.Linq<Store>() 
        where q.Country == country 
        orderby q.Code 
        select q.Code; 
1

:이 경우에 당신이 당신 LINQ 식을 변경하려면

var query = from q in session.Linq<Store>() 
      where q.Country == country 
      orderby q.Code 
      select q.Code; 
1

을 당신은 할 수 없습니다 그런 식의 문자열 목록에 사용자 지정 형식 목록을 캐스팅합니다. 가장 쉬운 방법은 query 객체가 사용자 정의 유형이 아닌 문자열의 iEnumerable 목록으로 시작되도록하는 것입니다. 당신의 선택 라인을 변경 :

select new q.Code.toString();

당신은 좋은 수 있습니다. q.Code 그 자체가 문자열이면, .ToString()은 필요하지 않습니다.