2

我想创建一个方法,我组的一对夫妇领域的实体,然后得到一些其他领域。像这样:传递Func键LINQ到实体总和(..)

private async Task<List<KpiGrounping<int>>> GetGrouping(IQueryable<MyEntityType> query, Func<MyEntityType, int> selector) 
    { 
     return await (from item in entity 
       group itemby new 
       { 
        item.DimCountry.Geo, 
        item.DimPlatform.Platform 
       } into x 
       select new MyGrounpingDto 
       { 
        Geo = x.Key.Geo.Trim(), 
        Platform = x.Key.Platform.Trim(), 
        Value = x.Sum(selector) 
       }).ToListAsync(); 
} 

我称之为像var foo = GetGrouping(context.MyEntities, x=>x.MyValue);

当我这样做我得到的错误:“内部.NET Framework数据提供错误1025”抛出 - 我可以没有什么意义。

我还发现,如果我不通过的选择,而是直接调用总和,像Value = x.Sum(s => s.MyValue);然后正常工作

+3

更改'选择器参数类型为'表达式>' –

+2

然后我得到错误,项目'x'不包含'总和'的定义。 调用x.AsQueryable()。Sum(selector)然后工作。谢谢! – MartinM

回答

2

您是否尝试过是这样做的:

private async Task<List<KpiGrounping<int>>> GetGrouping(IQueryable<MyEntityType> query, Expression<Func<MyEntityType, int>> selector) 
    { 
     return await (from item in entity 
       group itemby new 
       { 
        Geo = item.DimCountry.Geo.Trim(), 
        Platform = item.DimPlatform.Platform.Trim() 
       } into x 
       select new MyGrounpingDto 
       { 
        Geo = x.Key.Geo, 
        Platform = x.Key.Platform, 
        Value = x.Sum(selector) 
       }).ToListAsync(); 
} 
+0

是的,就像@Yacoub Massad建议的一样。但我必须将值赋值更改为:x.AsQueryable()。Sum(selector) – MartinM