2011-03-04 3 views
4

LINQ 쿼리를 사용하는 메서드에 동적 변수를 사용하는 방법을 알아 내려고하고 있습니다.동적 쿼리 변수에 대해 IQueryable 메서드가 확인되지 않았습니다.

using (DBDataContext db = new DBDataContext()) 
{ 
    var query = from c in db.Users 
       select 
       new 
       { 
        c.Firstname, 
        c.Lastname, 
        c.Age 
       }; 

    gridUsers.VirtualItemCount = query.Count(); 
    gridUsers.DataSource = query.ToList(); 
} 

을하지만이 작동하지 않습니다 예를 들어, 그것은 잘 작동

using (DBDataContext db = new DBDataContext()) 
{ 
    dynamic query = from c in db.Users 
       select 
       new 
       { 
        c.Firstname, 
        c.Lastname, 
        c.Age 
       }; 

    gridUsers.VirtualItemCount = query.Count(); 
    gridUsers.DataSource = query.ToList(); 
} 

이 오류는 '개체' '백작'에 대한 정의가 포함되어 있지 않습니다. 동적 키워드로 어떻게 작동시킬 수 있습니까?

답변

10

당신은 사용해야 할 것 :

gridUsers.VirtualItemCount = Queryable.Count(query); 
gridUsers.DataSource = Enumerable.ToList(query); 

동적 입력이 확장 방법을 "할"하지 않습니다. (난 완전히 이유는 확실하지 않습니다. 컴파일러는 전화 사이트에 대한 상당한 양의 정보를 숨겨 - 그것은 전화 사이트와 관련된 using 지시어도 모두 저장해야합니다. 또한 동적 바인딩 속도가 느려집니다, . 그들이 피하려고하는 문제가 될 수는 아마 너무 적은 이익을 위해 너무 많은 일이었다)

편집 :. 그냥 관심 밖으로, 당신이 당신의 순서에 대한 동적 입력을 사용하려고 첫 번째 장소? 이런 모든 종류의 것들이 더 까다로워진다는 것을 알고 있습니다 ... LINQ는 형식 유추의 다양한 비트에 상당히 의존합니다.

IQueryable<dynamic> 또는 IEnumerable<dynamic>을 사용하는 것이 좋습니다. 그러면 더 잘 작동합니다.

+2

흥미로운 (아마도) 생각하기 - '사용하기'숨기기의 필요성은 자동 사용되지 않는 참조 제거를 방해 할 수 있습니다 ... 또한 어떤 사람들은 코드 정보가 유출되었다고 (불합리하게) 불평 할 수도 있습니다. –

+0

@Marc : 사용되지 않는 참조 제거에 대한 흥미로운 점, 예. Eek. 그래서 기꺼이'동적'을 사용할 필요가 없습니다. –

+0

예, 실제로 사용하지 않는 것이 가장 큰 특징입니다 ... 나는 목표 그룹에 속하지 않는다고 생각합니다 ... –

관련 문제