2016-06-27 1 views
2

У меня есть таблица, в которой Позвони контрольный:Возвращение списка подсчета и сгруппированы по идентификатору LINQ к SQL

public class CHECKLIST{ 
[Key] 
public int CL_ID { get; set; } 

public EmpID { get; set; } 
} 

Я пытаюсь вернуть список, который выглядит, как показано ниже.

EMPID COUNT 
1  5 
2  7 
3  10 

Я пытаюсь написать репозиторий в качестве словаря и получить ошибку при г => g.Count из не может преобразовать лямбда-выражения к типу IEqualityComparer, потому что это не тип делегата:

public Dictionary<int, int> GetAllComplaintsCount() 
    { 
     try 
     { 
      return _context.Checklists 
       .GroupBy(a => a.MonitorEnteredEmpID) 
       .ToDictionary(g => g.Key, g => g.Count); 
     } 
     catch (Exception ex) 
     { 
      _logger.LogError("Could not get am with checklist", ex); 
      return null; 
     } 
    } 

ответ

2

Если изменить это:

ToDictionary(g => g.Key, g => g.Count); 

к следующему:

ToDictionary(g => g.Key, g => g.Count()); 

вы получите то, что хотите. Причина, почему вы должны это сделать, зависит от результата, возвращаемого GroupBy. Согласно specification

Предложение группы возвращает последовательности из IGrouping объектов, которые содержат ноль или более элементов, которые соответствуют ключевому значению для Группы. Например, вы можете сгруппировать последовательность строк в соответствии с первой букве в каждой строке. В этом случае первая буква является ключом и имеет символ типа, и хранится в свойстве Key каждого объекта IGrouping. Компилятор указывает тип ключа .

Это то, что вы хотите получить количество предметов в каждой группе. Поскольку у вас есть последовательность, вы можете получить количество элементов в последовательности, вызвав метод Count.

+0

Ну ... это была глупая ошибка .. Спасибо. – epv

+0

@epv Добро пожаловать. Я рад, что помог :) – Christos

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

  • Нет связанных вопросов^_^