首页 > 解决方案 > 分组后Linq select语句不起作用

问题描述

我通过加入从多个表中获取数据,并且我想根据日期对数据进行分组,但是在按语句分组后,我收到一个错误,无法根据日期选择所有实体。

var query = from record in _entityRepository.GetAll().Where(x => x.DateRecord > DateTime.UtcNow.Date)
            join job in _jobRepository.GetAll() on record.Id equals job.Id
                into g1
            from job in g1.DefaultIfEmpty()
            join punchList in _punchListRepository.GetAll() on record.Id equals punchList.Id
                into g2 from punchList in g2.DefaultIfEmpty()
            join punchJob in _jobRepository.GetAll() on punchList != null ? -1 : punchList.JobId equals punchJob.Id
                into g4 from punchJob in g4.DefaultIfEmpty()
            group new {record, job, punchList, punchJob} by new{ record.DateRecord}
            into g3
            select new
            {
                Date = g3.Key,
                job= g3.Select(x=>x.job),
                punchList= g3.Select(x=>x.punchList)

            };

而且我也在 select 语句中尝试了ToList(),但它没有用。

标签: c#entity-frameworklinqgroup-byasp.net-core-3.1

解决方案


试试这个:

var entityRepository=_entityRepository.GetAll().Where(x => x.DateRecord > DateTime.UtcNow.Date).ToList();
var jobRepository=_jobRepository.GetAll().ToList();;
var punchListRepository=_punchListRepository.GetAll().ToList();;


var query = from record in entityRepository
            
            join job in jobRepository on record.Id equals job.Id into g1
            from job in g1.DefaultIfEmpty()
            
            join punchList in punchListRepository on record.Id equals punchList.Id into g2 
            from punchList in g2.DefaultIfEmpty()
            
            join punchJob in jobRepository on punchList != null ? -1 : punchList.JobId equals punchJob.Id into g4 
            from punchJob in g4.DefaultIfEmpty()
            
            group new {record, job, punchList, punchJob} by new{ record.DateRecord} into g3
            select new
            {
                Date = g3.Key,
                job= g3.Select(x=>x.job).ToList(),
                punchList= g3.Select(x=>x.punchList).ToList()
            };

推荐阅读