如何通过 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
- 如果有多个匹配项,则抛出异常(这是
SingleOrDefault
与 FirstOrDefault
相比所做的)
- 如果没有与 Id 匹配的值,SingleOrDefault 将为 return null - 因此 null 合并将 select int.MaxValue - 这意味着没有匹配的值 - 或
numeric
为 null - 将排序到末尾
- 如果存在匹配 ID 的值,select 来自匹配子
b
的 numeric
字段。
- 按 selected 值排序
所以我想订购一个嵌套对象, 这个“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 的值 - 如果有多个匹配项,则抛出异常(这是
SingleOrDefault
与FirstOrDefault
相比所做的) - 如果没有与 Id 匹配的值,SingleOrDefault 将为 return null - 因此 null 合并将 select int.MaxValue - 这意味着没有匹配的值 - 或
numeric
为 null - 将排序到末尾 - 如果存在匹配 ID 的值,select 来自匹配子
b
的numeric
字段。 - 按 selected 值排序
b