如何使用缺少元素的Linq进行排序?

pat*_*gle 4 c# linq

通常在使用Linq时,我通常会使用Where或类似过滤掉空/空记录.但是,我需要在多个条件上订购一个列表,并按顺序保留列表中的所有项目.

以下内容仅.Dimension1.Count > 0适用于列表中的所有项目

var orderedList = mList.Elements
                       .OrderBy(x => x.Property1)
                       .ThenBy(x => x.Property2)
                       .ThenBy(x => x.Property3.Dimension1[0].Value2)
                       .ToList();
Run Code Online (Sandbox Code Playgroud)

如果有任何元素,Dimension1.Count == 0那么我得到错误:

'指数超出范围.必须是非负数且小于集合的大小.

这是预期的,因为数组没有标注尺寸.

当列表包含有哪些项目时,有没有办法使这项工作.Dimension1.Count = 0

请注意,这Dimension1[0].Value2是double类型.

Yac*_*sad 5

你可以这样做:

var orderedList = mList.Elements.OrderBy(x => x.Property1)
.ThenBy(x => x.Property2)
.ThenBy(x => x.Property3.Dimension1.Count == 0
    ? -1
    : x.Property3.Dimension1[0].Value2)
.ToList();
Run Code Online (Sandbox Code Playgroud)

我假设这Value2是一个整数.例如,如果它是一个字符串,您可以使用null而不是-1.

这个想法是当你Count为0 时使用特殊值.