gpt4 book ai didi

c# - 使用 LINQ 按子类的属性对父类列表进行排序

转载 作者:行者123 更新时间:2023-11-30 20:31:38 25 4
gpt4 key购买 nike

我有一个具有以下结构的类

public class DisplayItem 
{
public string Id { get; set; }
public SortFields SortFields { get; set; }
}

有一个子类

public class SortFields
{
public string ProductNumber { get; set; }
public DateTime DateOfUpload { get; set; }
}

因此,我们的想法是根据 SortFields 类属性中的值对列表进行排序。

我能想到的最基本的解决方案是做这样的事情

public IEnumerable<DisplayItem> Sort(IEnumerable<DisplayItem> source, string sortBy, SortDirection sortDirection)
{

switch (sortBy)
{
case "Product Number":
switch (sortDirection)
{
case SortDirection.Ascending:
return source.OrderBy(x => x.SortFields.ProductNumber);
case SortDirection.Descending:
return source.OrderByDescending(x => x.SortFields.ProductNumber);
}
case "Uploaded Date":
{
//--do--
}
}
}

理想情况下,我希望能够将 sortBy 作为参数传递给 orderby 方法,虽然我确实在 Internet 上找到了几个解决方案,但它们似乎无法根据以下内容对基类列表进行排序子类属性。

有没有一种方法可以将子类属性作为参数传递,并能够对父类列表进行排序?

最佳答案

按属性和 lambda 将排序存储在字典中 Dictionary<string,Func<DisplayItem,string>> dct并传入方法:

public IEnumerable<DisplayItem> Sort(IEnumerable<DisplayItem> source, string sortBy, Dictionary<string,Func<DisplayItem,string>> dct, SortDirection sortDirection)
{
switch (sortDirection)
{
case SortDirection.Ascending:
return source.OrderBy(x => dct[sortBy]);
case SortDirection.Descending:
return source.OrderByDescending(x => dct[sortBy]);
default:
return null;
}
}

所以你会像这样存储你的 lambda:

dct["ProductNumber"] = x => x.SortFields.ProductNumber;

关于c# - 使用 LINQ 按子类的属性对父类列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42898846/

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