如何通过 orderBy 对嵌套的 Linq 对象进行排序

How to order a nested Linq object via orderBy

所以我想订购一个嵌套对象, 这个“someObject”对象在其内部具有“Values”对象。 如何通过 orderBy 订购这个嵌套对象。

mySendendId=11

someObject=
Id=1
Values===
          Id=10     numeric =20     text=null
          Id=11     numeric =1.4    text=null
          Id=12     numeric =32     text=null
          Id=13     numeric=null    text=”abcde”

Id=2
Values===
          Id=10     numeric =21     text=null
          Id=11     numeric =1.2    text=null
          Id=12     numeric =33     text=null
          Id=13     numeric=null    text=”bcde”

Id=3
Values===
          Id=10     numeric =22     text=null
          Id=11     numeric =1.3    text=null
          Id=12     numeric =34     text=null
          Id=13     numeric=null    text=”cde”

一些对象=1,2,3

orderedObject = someObject.orderBy(a=>a.Values.(b=>b.numeric).Where(b=>b.Id= =mySendendId))

有序对象=2,3,1

我已经试过了

orderedObject= someObject.OrderBy(a => a.Id).Where(a => a.Values.OrderBy(b => b.Numeric).Any(b => b.Id == mySenedId));

但我只是在没有订购的情况下返回了原始对象。

如果我理解正确,这应该可以满足您的需求:

orderedObject= someObject.OrderBy(a => a.Values.SingleOrDefault(b => b.Id == mySenedId)?.numeric ?? int.MaxValue);

由于没有样本可以试用,我希望我的理论是正确的。

应该遵循这样的逻辑:

  • someObject 中的每个对象 a 获取 Values 并找到具有匹配 ID
  • 的值 b
  • 如果有多个匹配项,则抛出异常(这是 SingleOrDefaultFirstOrDefault 相比所做的)
  • 如果没有与 Id 匹配的值,SingleOrDefault 将为 return null - 因此 null 合并将 select int.MaxValue - 这意味着没有匹配的值 - 或 numeric 为 null - 将排序到末尾
  • 如果存在匹配 ID 的值,select 来自匹配子 bnumeric 字段。
  • 按 selected 值排序