gpt4 book ai didi

c# - 使用查询表达式对 List 进行排序

转载 作者:可可西里 更新时间:2023-11-01 08:05:23 26 4
gpt4 key购买 nike

我在使用 Linq 订购这样的结构时遇到问题:

public class Person
{
public int ID { get; set; }
public List<PersonAttribute> Attributes { get; set; }
}

public class PersonAttribute
{
public int ID { get; set; }
public string Name { get; set; }
public string Value { get; set; }
}

一个人可能会这样:

PersonAttribute Age = new PersonAttribute { ID = 8, Name = "Age", Value = "32" };
PersonAttribute FirstName = new PersonAttribute { ID = 9, Name = "FirstName", Value = "Rebecca" };
PersonAttribute LastName = new PersonAttribute { ID = 10, Name = "LastName", Value = "Johnson" };
PersonAttribute Gender = new PersonAttribute { ID = 11, Name = "Gender", Value = "Female" };

我想使用 LINQ 投影按我选择的人员属性升序对人员列表进行排序,例如,按年龄排序或按名字排序。

我正在尝试类似的东西

string mySortAttribute = "Age"
PersonList.OrderBy(p => p.PersonAttribute.Find(s => s.Name == mySortAttribute).Value);

但是语法让我失望了。有什么线索吗?

最佳答案

OrderBy 是一个生成新序列的 LINQ 扩展。要订购现有序列,您需要添加一两个扩展方法...然后您可以使用:

PersonList.Sort(p => p.Attributes.Find(
s => s.Name == mySortAttribute).Value);

public static class ListExtensions {
public static void Sort<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(x), selector(y)));
}
public static void SortDescending<TSource, TValue>(
this List<TSource> source,
Func<TSource, TValue> selector)
{
var comparer = Comparer<TValue>.Default;
source.Sort((x, y) => comparer.Compare(selector(y), selector(x)));
}
}

关于c# - 使用查询表达式对 List<T> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/695906/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com