我使用以下查询从数据库“媒体”表中获取值。现在我必须按其父 ID 对行进行排序意味着首先我必须显示父 ID 行,然后在其下显示其子行,例如下表:
ID Name ParentMediaId
3 C null
1 A 3
4 D null
2 B 4
如何使用下面的数据表得到如上表的结果,并用lambda表达式修改下面的linq查询?
数据库中的媒体表:
ID Name ParentMediaId
1 A 3
2 B 4
3 C null
4 D null
查询获取数据:
var dataset = _mediaRepository.GetAll().
Where(d => d.matter== matterId).Select(d => new
{
d.Id,
d.Name,
d.ParentMediaId,
}).ToList();
最佳答案
如果值不是null
,您可以通过ParentMediaId
OrderBy
;否则 Id
,然后通过 ParentMediaId
使用 ThenBy
进行排序,使 parent 先出现。
对于 OrderBy
,您可以使用 null-coalescing operator (??
)。如果操作数不是null
,它返回左边的操作数;否则返回右边的操作数。
var objects = _mediaRepository.GetAll()
.Where(d => d.matter== matterId)
.Select(d => new
{
d.Id,
d.Name,
d.ParentMediaId,
});
var dataset = objects.OrderBy(o => o.ParentMediaId ?? o.Id)
.ThenBy(o => o.ParentMediaId)
.ToList();
如果 child 先出现,则使用 ThenByDescending
而不是 ThenBy
。
元素的顺序如下:
ID Name ParentMediaId
3 C null
1 A 3
4 D null
2 B 4
关于c# - 优化 linq 查询以对行进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38014824/