是否可以使用linq创建按给定位置排序的csv字符串?

我正在创建一个值转换器,该转换器接收(对象值)作为参数。这些是对象DrawNumber的编号。我想将这些数字转换为以逗号分隔的字符串,但是数字必须位于正确的位置(PositionDrawNumber的属性)。在LINQ中可以做到吗?

public object Convert(object value,Type targetType,object parameter,CultureInfo culture)
{
    IEnumerable<DrawNumber> numbers = (IEnumerable<DrawNumber>)value;
    List<DrawNumber> numberList = new List<DrawNumber>(numbers);
    var csv = string.Join(",",numberList);
    // this doesnt order it based on position
}
public class DrawNumber
{
    public int DrawId { get; set; }
    public int Number { get; set; }
    public int? Position { get; set; }
}
s5705219 回答:是否可以使用linq创建按给定位置排序的csv字符串?

您可以使用OrderBy。由于Position可为空(int?),因此您可能希望首先显示空值。在这种情况下,您应该使用OrderByThenBy

var numberList = numbers.OrderBy(n => n.Position.HasValue)
                        .ThenBy(n => n.Position)
                        .ToList();
,

如果要在枚举的开头放置空位置的对象

app:popUpTo="@id/loginFragment"
app:popUpToInclusive="true"

如果要在空对象的末尾放置空位置的对象

string.Join(",",numberList.OrderBy(n => n.Position == null).ThenBy(n => n.Position).Select(n => n.Number))

如果您不想将空对象放在可枚举的

string.Join(",numberList.OrderBy(n => n.Position != null).ThenBy(n => n.Position).Select(n => n.Number))
本文链接:https://www.f2er.com/2968524.html

大家都在问