4

我已经开始尝试使用 LINQ DynamicLibrary。我试图用几个或一个动态 LINQ 查询替换一堆 LINQ 语句。我现有的静态查询如下:

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();
}

我无法从分组中提取 theCount或 the 。List我该怎么做呢?我花了相当多的时间寻找解决方案。如果可能的话,我希望能够避免使用反射。我在以下链接的前面有一些指示,但这对我的实际问题没有帮助。提前感谢您的帮助。

System.LINQ.Dynamic:将 Select("new (...)") 放入 List<T>(或任何其他可枚举的 <T> 集合)

4

2 回答 2

2

对于Count,它可以写成:

private List GenerateImpl(IList myList, string field)
{
    IQueryable queryableList = myList.AsQueryable();
    IQueryable groupedList = queryableList.GroupBy(field,"it").
                            OrderBy("Key descending").
                            Select("new (Key as Key, Count() as Count)");

    // Note: IQueryable doesn't have ToList() implementation - only IEnumerable 
    return output.ToList(); // will not work
}

对于List - 可能您需要将自定义实现添加到 DynamicLibrary...在这里查看 Contains() 方法的完成方式

于 2011-03-09T23:06:22.693 回答
0

一种解决方案是使用我的产品AdaptiveLINQ.QueryByCube提供的 LINQ 扩展方法。

免责声明:我是 AdaptiveLINQ 开发人员

于 2014-10-06T18:41:57.360 回答