动态Linq选择复杂对象

时间:2016-08-18 12:14:49

标签: c# linq dynamic-linq

我有一个简单的Linq查询:

var retVal = readModel
    .GroupBy(x => x.Service)
    .Select(
        grp => new GroupView
        {
            GroupName = grp.Key,
            GroupItems = grp.Sum(k => k.NumberOfItems)
        }
    );

retValIQueryable<GroupView>。到目前为止一切顺利,我要做的是使这个查询动态化,这样用户就可以使用自定义分组策略了。

这是我的第一次尝试:

var retVal = readModel
    .GroupBy("Service", "it")
    .Select("it.key");

这给了我一个包含group名称的字符串数组。这很好,但我想要实现的结果是相当远的,因为我有两个未提出的问题:

  • 如何将结果翻译为GroupView模型
  • 我该如何赚这笔钱?

1 个答案:

答案 0 :(得分:0)

事情是DynamicLinq不允许它简单。

如果要扩展DynamicLinq库以返回强类型结果,可以检查this answer

但如果你不想要它,这是一个简单的解决方案:

//select your grouped results
var retVal = readModel
        .GroupBy("Service", "it")
        .Select("new (it.key as GroupName, Sum(it.NumberOfItems) as GroupItems)");

//Map them
var res = ((IEnumerable<dynamic>)retVal)
          .Select(x => new GroupView 
                 { 
                    GroupName = x.GroupName, 
                    GroupItems = x.GroupItems 
                 });