我有一个列表列表,即IList<IList<Result>>
,我需要按属性排序DisplayOrder
。
IList<IList<Result>> results = new List<IList<Result>>();
results = validationResults.OrderBy(x => x.OrderBy(y => y.DisplayOrder)).ToList();
validationResults
价值:
[
[
{
"fieldName": "AccountName",
"displayOrder": 5
}
],
[
{
"fieldName": "AccountNumber",
"displayOrder": 6
}
],
[
{
"fieldName": "BankAddress",
"displayOrder": 4
}
]
]
期望值:
[
[
{
"fieldName": "BankAddress",
"displayOrder": 4
}
],
[
{
"fieldName": "AccountName",
"displayOrder": 5
}
],
[
{
"fieldName": "AccountNumber",
"displayOrder": 6
}
]
]
我试过了,但它给出了以下例外。
System.InvalidOperationException:无法比较数组中的两个元素。---> System.ArgumentException:至少一个对象必须实现 IComparable。在 System.Collections.Comparer.Compare(Object a, Object b) 在 System.Collections.Generic.ObjectComparer
1.Compare(T x, T y) at System.Linq.EnumerableSorter
2.CompareAnyKeys(Int32 index1, Int32 index2) 在 System.Collections.Generic.ComparisonComparer1.Compare(T x, T y) at System.Collections.Generic.ArraySortHelper
1.InsertionSort(T[] keys, Int32 lo, Int32 hi, 比较1 comparer) at System.Collections.Generic.ArraySortHelper
1.IntroSort(T[] keys, Int32 lo, Int32 hi, Int32 depthLimit,比较1 comparer) at System.Collections.Generic.GenericArraySortHelper
1.Sort(T[] keys, Int32 index, Int32 length, IComparer1 comparer) --- End of inner exception stack trace --- at System.Collections.Generic.GenericArraySortHelper
1.Sort(T[] keys) , Int32 索引, Int32 长度, IComparer1 comparer) at System.Array.Sort[T](T[] array, Int32 index, Int32 length, IComparer
1 比较器) 在 System.Linq.EnumerableSorter2.QuickSort(Int32[] keys, Int32 lo, Int32 hi) at System.Linq.EnumerableSorter
1.Sort(TElement[] 元素, Int32 count) 在 System.Linq.OrderedEnumerable1.ToList() at System.Linq.Enumerable.ToList[TSource](IEnumerable
1 源)在 Api.Controllers.ValidationController.ValidateFields(ValidateFieldsRequest validateFieldsRequest) 在 J:\Api\ValidationApi\ValidationApi\Controllers\ValidationController.cs:line 191
注意:我使用的是 .net core 3.1
编辑:我添加了等效的 JSON 只是为了可读性,以便其他人可以轻松理解和调试问题。是的,Result
类有一个属性DisplayOrder
。我想对外部列表进行排序。并且IList<Result>
始终只有一件。
展平列表,排序,然后投影回列表列表:
results = validationResults
.SelectMany(x=>x) // Flatten
.OrderBy(x=>x.DisplayOrder) // sort
.Select(x=>new List<Result>{x}); // Project to list of lists
(我还没有检查过这个编译,但希望你能明白)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句