LINQ DynamicLibrary로 약간의 실험을 시작했습니다. 여러 LINQ 문을 몇 개 또는 하나의 동적 LINQ 쿼리로 대체하려고합니다. 보시다시피LINQ DynamicLibrary : IQueryable에서 개수 및 목록을 추출하는 방법
private List<TicketChartData> GenerateImpl(IList<ServiceItem> myList)
{
var output = from ticket in myList
group ticket by ticket.Region into grouped
orderby grouped.Count() descending
select new TicketChartData(grouped.Key, grouped.Count(), grouped.ToList());
return output.ToList();
}
이 작품의 내 단위 ServiceItem
입니다 다음과 같이 기존의 정적 쿼리입니다. 이 작업은 모두 정상적으로 작동하며 결과 집합은 Region
으로 그룹화됩니다. DynamicLibrary를 사용하면 유효한 동적 필드로 그룹화 할 수 있습니다 (별도로 검증을 처리합니다). 그래서 DynamicLibrary를 사용하여 같은 쿼리를 작성했지만 매우 성공적이지는 않습니다. 여기에 물론 컴파일되지 않는 새로운 방법이다 : 나는 추출 할 수 없었다
private List<TicketChartData> GenerateImpl(IList<ServiceItem> myList, string field)
{
IQueryable<ServiceItem> queryableList = myList.AsQueryable<ServiceItem>();
IQueryable groupedList = queryableList.GroupBy(field,"it").
OrderBy("Key descending").
Select("new (Key as Key)"); // Not what i need
return output.ToList();
}
어느 것도 Count
이나 그룹에서 List
. 어떻게해야합니까? 나는 해결책을 찾기 위해 상당한 시간을 보냈다. 가능한 경우 Reflection 사용을 피할 수 있기를 원합니다. 이 링크에는 다음과 같은 몇 가지 지침이 있지만 실제 문제에는 도움이되지 않습니다. 모든 도움을 미리 감사드립니다.
System.LINQ.Dynamic: Select(" new (...)") into a List<T> (or any other enumerable collection of <T>)
유용한 정보 그러나 문제를 해결하지는 못합니다. 신중하게 내 쿼리를 사용하는 경우 ** GroupBy **를 사용합니다. 이것은 구별되는 요소입니다. GroupBy는 열거 할 수없는 _dynamic_ 유형의 객체를 만듭니다. GroupBy는 IQueryable을 반환하는 반면 select, where, orderby 등은 IQueryable을 반환합니다. 여기서 T는 소스 유형입니다. –