문제

동적 LINQ 사용 (http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-linq-dynamic-query-library.aspx) 아래 쿼리를 실행하여 iqueryable을 반환합니다. 이 결과에서 ienumerable이면 count ()를 실행할 수 있지만 값을 얻기 위해 tolist ()는 없습니다. 나는 foreach를 사용하여 그들을 열거 할 수 있지만 반사없이 결과적인 익명 유형의 개별 필드에 액세스 할 수는 없습니다. 이것이 유일한 방법입니까? 감사

var query =
                db.Customers.Where("City == @0 and Orders.Count >= @1", "London", 10).
                OrderBy("CompanyName").
                Select("New(CompanyName as Name, Phone)");

            foreach (var item in query)
            {
                foreach (var prop in item.GetType().GetProperties())
                {
                    Console.WriteLine(prop);
                }
            }

캐스팅을 시도했지만 'Test'를 입력하기 위해 'DynamicClass1'유형의 객체를 캐스트 할 수없는 오류가 발생했습니다.

 foreach (var item in query)
            {
                Console.WriteLine("{0}: {1}", ((Test)item).CompanyName, ((Test)item).Phone);
            }

public class Test {
            public string CompanyName { get; set; }
            public string Phone { get; set; }

}

도움이 되었습니까?

해결책

쿼리가 런타임에 해결 될 때 컴파일 시간에 동적 객체의 유형이 해결 될 것으로 예상 할 수 없습니다. 그것이 동적 LINQ의 모든 것입니다. 비용 컴파일 시간 점검에서 동적 쿼리를 실행할 수 있습니다.

최소한 C# 4까지 동적 유형의 속성에 액세스하려면 반사를 사용해야합니다.

다른 팁

ienumerable이 일반적이지 않으면 반사를 사용하기보다는 캐스트해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top