ASP.NET Core无法对分组项目进行排序

时间:2019-02-06 05:49:35

标签: entity-framework asp.net-core

我的ASP.NET Core应用程序中具有以下模型:

public class LocationTypeGroup {
    public string Name { get; set; }
    public IEnumerable<LocationType> LocationTypes { get; set; } 
}

public class LocationType
{

    [Key]
    public int LocationTypeID { get; set; }

    public string Name { get; set; }

    public string IntExt { get; set; }
}

我正在尝试运行一个查询,该查询将它们按IntExt分组,并在每个组中按名称排序。

以下内容有效,但无法排序:

    public async Task<List<LocationTypeGroup>> GetGroupedLocationTypes()
    {
        return await _context.LocationTypes
            .GroupBy(p => p.IntExt)
            .Select(g => new LocationTypeGroup
            {
                Name = g.Key,
                LocationTypes = g.Select(x => x)
            })
            .OrderBy(x=>x.Name)
            .ToListAsync();
    }

如果我改成这个:

LocationTypes = g.Select(x => x).OrderBy(x => x)

然后我仍然没有得到排序的结果。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

可能是由于Entity Framework Core版本太旧造成的。尝试这种方法,而且会更便宜:

//data is loaded into memory
var data = await _context.LocationTypes.ToListAsync();
//data's transform
var answer = data.GroupBy(x => x.IntExt)
                 .Select(x => new LocationTypeGroup
                 {
                     Name = x.Key,
                     LocationTypes = x.AsEnumerable()
                 }).OrderBy(x => x.Name).ToList();

答案 1 :(得分:1)

EF可能无法建立SQL查询。

因此您需要手动简化它。并分为2个查询:

var groups = await context.LocationTypes
                          .GroupBy(p => p.IntExt)
                          .ToListAsync();

return groups.Select(g => new LocationTypeGroup
              {
                  Name = g.Key,
                  LocationTypes = g.Select(x => x)
              })
             .OrderBy(x=>x.Name);

第一个查询仅加载组,第二个查询对它们进行排序并转换为LocationTypeGroup