Linq select 语句在分组后不起作用
Linq select statement not working after grouping
我通过连接从多个表中获取数据,我想根据日期对数据进行分组,但在按语句分组后,我收到 select all entities against a date 的错误。
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() 但它没有用。
试试这个:
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()
};
我们需要将查询分成两部分,因为 group by 子句没有完全转换成 SQL 所以在我的例子中我想要一个月的数据所以下面是我的代码片段。
var query = from record in _entityRepository.GetAll().Where(x =>
x.DateRecord > DateTime.UtcNow.Date && x.DateRecord <= DateTime.UtcNow.Date.AddMonths(1))
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()
select new {record, job, punchList,punchJob};
var queryResult = await query.ToListAsync();
var result = queryResult.GroupBy(x => x.record.DateRecord)
.Select(o => new
{
Date = o.Key,
job = o.Select(x => x.job ?? new Job()).ToList(),
punchList = o.Select(x => x.punchList ?? new PunchList()).ToList()
});
我通过连接从多个表中获取数据,我想根据日期对数据进行分组,但在按语句分组后,我收到 select all entities against a date 的错误。
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() 但它没有用。
试试这个:
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()
};
我们需要将查询分成两部分,因为 group by 子句没有完全转换成 SQL 所以在我的例子中我想要一个月的数据所以下面是我的代码片段。
var query = from record in _entityRepository.GetAll().Where(x =>
x.DateRecord > DateTime.UtcNow.Date && x.DateRecord <= DateTime.UtcNow.Date.AddMonths(1))
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()
select new {record, job, punchList,punchJob};
var queryResult = await query.ToListAsync();
var result = queryResult.GroupBy(x => x.record.DateRecord)
.Select(o => new
{
Date = o.Key,
job = o.Select(x => x.job ?? new Job()).ToList(),
punchList = o.Select(x => x.punchList ?? new PunchList()).ToList()
});