Запрос ToDictionary из второй таблицы возвращает Null


У меня есть две модели, как показано ниже:

public class Complaint
{
    [Key]
    public int COMP_ID { get; set; }
    public Nullable<DateTime> Received_DT { get; set; }
    public virtual ICollection<CHECKLIST> CHECKLISTs { get; set; }
}


public class CHECKLIST
{
    [Key]
    public int CL_ID { get; set; }
    public int EmpID { get; set; }
    public virtual COMPLAINT Complaints { get; set; }
}

У меня есть репозиторий, который запрашивает и возвращает количество всех контрольных списков, введенных EMPID, но когда я добавляю другой фильтр из родительской таблицы .Where, он возвращает null. Когда я вынимаю свой .Предложение Where из родительской таблицы работает просто отлично.

Edit попытка включить таблицу

public Dictionary<int, int> GetAllChecklistCount()
    {
        try
        {
            return _context.Checklists
                .Where(t => t.Complaints.Received_DT.Value.Year == 2016) 
                .Include(t => t.Complaints)
                .GroupBy(a => a.EmpID)
                .ToDictionary(g => g.Key, g => g.Count());
        }
        catch (Exception ex)
        {
            _logger.LogError("Could not get am with checklist", ex);
            return null;
        }
    }

Ошибка выбрасывается

Исключение: система.ArgumentException ' в mscorlib.файл DLL Система.ArgumentException: выражение типа System.Func2[Microsoft.Data.Entity.Query.EntityQueryModelVisitor+TransparentIdentifier2[CRAMSV3_2.Models.CHECKLIST,Microsoft.Data.Entity.Storage.ValueBuffer],System.Int32]- не может использоваться для параметра типа System.Func 2[CRAMSV3_2.Models.CHECKLIST,System.Int32]' of method 'System.Collections.Generic.IEnumerable1 [Система.Линк.IGrouping 2[System.Int32,CRAMSV3_2.Models.CHECKLIST]] _GroupBy[CHECKLIST,Int32,CHECKLIST](System.Collections.Generic.IEnumerable1 [CRAMSV3_2.Модели.Контрольный список], система.Func 2[CRAMSV3_2.Models.CHECKLIST,System.Int32], System.Func2 [CRAMSV3_2.Модели.КОНТРОЛЬНЫЙ СПИСОК, CRAMSV3_2.Модели.Контрольный список]) '

Вопрос как лучше всего возвращать результаты с несколькими таблицами или только с одной таблицей, но обязательно с датами из другой таблицы могут быть запрошены.

1 3

1 ответ:

Необходимо включить объект жалобы.

return _context.Checklists
            .Where(t => t.Complaints.Received_DT.Value.Year == 2016)
            .Include(t => t.Complaints)
            .GroupBy(a => a.EmpID)
            .ToDictionary(g => g.Key, g => g.Count());

Смотритездесь Подробнее