ASP.NET核心不能排序分组的项目

问题描述 投票:0回答:2

我在我的ASP.NET核心应用以下模型:

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)

然后,我还没有得到一个排序结果。

我究竟做错了什么?

entity-framework asp.net-core
2个回答
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


1
投票

可能是它造成太旧版本的实体框架核心。试试这个办法,而且这将是更便宜:

//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();
© www.soinside.com 2019 - 2024. All rights reserved.