2

Я пытаюсь создать метод, который я группирую сущность на пару полей, а затем получаю некоторое другое поле. Как так:Передача Func в Linq в Entities Sum (..)

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

Измените ' selector' для 'Expression >' –

+2

Затем я получаю сообщение об ошибке, что элемент 'x' не содержит определения для 'Sum'. Вызов x.AsQueryable(). Затем (селектор) работает. благодаря! – 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

Да, как предположил и Яубус Массад. Но мне нужно изменить назначение значения на: x.AsQueryable(). Сумма (селектор) – MartinM