linq 如何在AppDbContext返回列表中包含计数

hi3rlvi2  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(131)

我正在执行一个查询,以获取批处理的详细信息,我希望包括属于该批处理的记录计数,中间使用一些筛选器。
当前函数如下所示:

public async Task<IEnumerable<Batch>> GetAllBatchSummary(BatchFilter filter)
        {

            return await _dbContext.Batch
                .Where(b => b.BatchDetails.Count(bd => bd.RecordStatus == filter.RecordStatus) > 0)
                .Include(b => b.ProcessType)
                .OrderBy(b => b.ProcessTypeId)
                .Select(b => new
                {
                    Batch = b,
                    BatchDetailsCount = b.BatchDetails.Count(bd => bd.RecordStatus == filter.RecordStatus)
                })
                .Skip((filter.PageNumber - 1) * filter.PageSize)
                .Take(filter.PageSize)
                .ToListAsync();
        }

但是它得到了一个错误,因为返回类型不是预期的类型:
CS0266无法隐式转换类型“系统.集合.泛型.列表〈〈匿名类型:PaymentGateway.Domain.Entities.ProcessControl.Batch批处理,int BatchDetailsCount〉〉'到'System.Collections.Generic.IEnumerable<PaymentGateway.Domain.Entities.ProcessControl.Batch>'。存在显式转换(是否缺少转换?)
我已经尝试过使用SelectMany()和.AsEnumerable(),但没有成功。
有什么建议吗?

ppcbkaq5

ppcbkaq51#

您的方法正在返回一个类型,但需要Task<IEnumerable<Batch>>
创建一个类似BatchDto的模型,并将属性Map到那里。

public class BatchDto
{
    public int BatchDetailsCount { get; set; }
    public Batch Batch { get; set; }
}

public async Task<List<BatchDto> GetAllBatchSummary(BatchFilter filter)
{
    return await _dbContext.Batch
        .Where(b => b.BatchDetails.Count(bd => bd.RecordStatus == filter.RecordStatus) > 0)
        .Include(b => b.ProcessType)
        .OrderBy(b => b.ProcessTypeId)
        .Select(b => new BatchDto
        {
            Batch = b,
            BatchDetailsCount = b.BatchDetails.Count(bd => bd.RecordStatus == filter.RecordStatus)
        })
        .Skip((filter.PageNumber - 1) * filter.PageSize)
        .Take(filter.PageSize)
        .ToListAsync();
}

相关问题