비 일반적인 iqueryable 열거 문제
-
05-07-2019 - |
문제
동적 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이 일반적이지 않으면 반사를 사용하기보다는 캐스트해야합니다.
제휴하지 않습니다 StackOverflow