2015-12-16 9 views
0
public struct CardGrouping 
    { 
     public string Name { get; set; } 
     public int Count { get; set; } 
    } 

    public List<CardGrouping> GetCardGrouping(IQueryable<Areas.RetailShop.Models.FPSinformation> queryable, Expression<Func<Areas.RetailShop.Models.FPSinformation, string>> groupingFunction) 
    { 
     return queryable.GroupBy(groupingFunction) 
       .Where(x => x.Key != null) 
       .Select(x => new CardGrouping 
       { 
        Name = x.Key, 
        Count = x.Sum(groupingFunction) 
       }).ToList(); 
    } 

Я пытаюсь сделать что-то вроде этого, но получаю сообщение об ошибкене содержит определения для GroupBy

IQueryable<FPSinformation> не содержит определение для «GroupBy» и лучший метод перегрузки расширения ParallelEnumerable.GroupBy<string, int>(ParallelQuery<string>, Func<string, int>) требуется приемник типа ParallelQuery<string>

Что я делаю неправильно?

EDIT

var data1 = fpslist.GroupBy(x => x.Ration_Card_Type1) 
       .Select(x => new 
       { 
        CardType_Name = x.Key, 
        CardType_Count = x.Sum(y => y.Ration_Card_Count1) 
       }).ToList(); 

Это фактический код, который я пытаюсь оптимизировать

+0

@Neel его там уже –

ответ

2

Изменить строку Areas.RetailShop.Models.FPSinformation в конкурсе

public List<CardGrouping> GetCardGrouping(List<Areas.RetailShop.Models.FPSinformation> queryable, 
     Expression<Func<Areas.RetailShop.Models.FPSinformation, string>> groupingFunction, 
     Func<Areas.RetailShop.Models.FPSinformation, int> sumFunction) 

    { 


     if (queryable.AsQueryable() != null) 
     { 

      var data = queryable.AsQueryable().GroupBy(groupingFunction).Where(x => x.Key != null).Select(x => new CardGrouping 
      { 
       Name = x.Key == null ? "" : x.Key.ToString(), 
       Count = x.Sum(sumFunction) 
      }).ToList(); 
      return data; 
     } 
     return null; 
    } 
+0

пытался что тоже в этом случае '.гд (х => x.Key! = NULL)' получения ошибки не может преобразовать Int в строку –

+0

ключ не может получить нулевой каждый раз, когда вы можете –

+0

изменить int на int? –

2

Там это 2 проблемы с этим кодом.

Во-первых, чтобы сделать его компиляции, то groupingFunction должен быть Func<FPSinformation, int> - тип ввода не string, это FPSinformation.

Это изменение сделает его компиляцией, но компилятор выберет метод расширения Enumerable.GroupBy. Queryable.GroupBy требует Expression<Func> параметра, а не Func - поэтому она должна быть Expression<Func<FPSinformation, int>>

public List<CardGrouping> GetCardGrouping(IQueryable<FPSinformation> queryable, 
          Expression<Func<FPSinformation, int>> groupingFunction) 

Вы группируя его с помощью int, поэтому .Where(x => x.Key != null) не имеет смысла - x.Key не может быть пустым.

+0

Моя ошибка, я хочу сгруппировать по строке, которую я изменил, но хочу суммировать ее счет –

+0

'var data1 = fpslist.GroupBy (x => x.Ration_Card_Type1) . Выбрать (x => новый { CardType_Name = x.Key, CardType_Count = x.Sum (у => y.Ration_Card_Count1) }) ' это мой фактический код, который я пытался оптимизировать –

Смежные вопросы