根据Entity Framework Core

时间:2019-01-31 20:29:21

标签: c# linq asp.net-core entity-framework-core

我有一个包含一些数据的表,我想使用.NET核心实体框架选择具有唯一日期的行。我想将结果作为唯一行的列表返回。这是代码。

public async Task<IEnumerable<Records>> GetUniqueRecordsByDate(int bId)
{
     var rowsToReturn = await _context.Records
                .Where(b => b.SId == bId)
                .Select(d => d.Date)
                .Distinct()
                .OrderBy(d => d)
                .ToListAsync();
     return rowsToReturn;
} 

我正在尝试应用上述代码,但出现此错误

  

无法隐式转换类型'System.Collections.Generic.List <   System.Linq.IGrouping <   System.DateTime,Test.API.Models.Records >>'到'System.Collections.Generic.IEnumerable <   Test.API.Models.Record>。存在显式转换(您是否缺少演员表?)

还有什么其他方法可以实现我的期望,或者我在代码中缺少某些内容?

2 个答案:

答案 0 :(得分:0)

首先按照以下步骤制作DTO

public class RecordsByDateDTO
{
    public DateTime Date {get; set;}
    public List<Record> Records {get; set;}
}

要选择具有唯一日期的行,您必须使用.GroupBy并编写GetUniqueRecordsByDate方法,如下所示:

public async Task<List<RecordsByDateDTO>> GetUniqueRecordsByDate(int bId)
{
     var recordsByDate = await _context.Records.Where(r => r.SId == bId).GroupBy(r => r.Date)
                              .Select(group => new RecordsByDateDTO
                              {
                                   Date =  group.Key,
                                   Records = group.ToList()
                              }).OrderBy(r => r. Date).ToListAsync();

    return recordsByDate;
} 

答案 1 :(得分:0)

var rowsToReturn = await _context.Records
            .Where(b => b.SId == bId)
            .Select(d => d.Date)
            .Distinct()
            .OrderBy(d => d)
            .AsEnumerable()
            .ToListAsync();
return rowsToReturn;

在ToListAsync()之前使用AsEnumerable()。它将起作用。