c# - 如何使用 LINQ 对 List<ReturnItem> 集合中的项目进行排序和过滤?

标签 c# linq collections linq-to-objects

这很难解释。

我们有一个数据表,其中包含用户可配置的列选择,这些列在编译时是未知的。 DataTable 中的每一列都是字符串类型。我们需要将此 DataTable 转换为“ReturnItem”对象的强类型集合,以便我们可以使用 LINQ 进行排序和过滤,以便在我们的应用程序中使用。

我们取得了一些进展:

  1. 我们从基本的 DataTable 开始。
  2. 然后我们处理 DataTable,为每一行创建一个新的“ReturnItem”对象
  3. 这个“ReturnItem”对象只有两个属性:ID (string) 和 Columns(List(object))。属性集合包含每一列的一个条目,代表一个数据行。
  4. 每个属性都是强类型的(整数、字符串、日期时间等)。例如,它会将一个新的“DateTime”对象添加到“ReturnItem”列列表中,其中包含“Created”数据表列的值。
  5. 结果是一个 List(ReturnItem),然后我们希望能够根据其中一个属性中的值使用 LINQ 对其进行排序和过滤,例如,按“创建”日期排序。

我们一直在使用 LINQ 动态查询库,它让我们到目前为止,但它看起来不像前进的方向,因为我们在对象的列表集合上使用它。

基本上,我的问题归结为:如何使用 LINQ,根据属于 ReturnItem 类的 List(object) 属性中的值,对 List(ReturnItem) 集合中的项目进行排序和过滤?

最佳答案

我不确定我是否理解问题所在。假设您知道要排序的列的索引并且它们是相当普通的类型,您不能只做类似...

void Main()
{
    List<ReturnItem> items = new List<ReturnItem>();
    items.Add(new ReturnItem() 
              { 
                    ID = 1, 
                    Columns = new List<object>() 
                    {
                        DateTime.Now,
                        "donkey"
                    }
               });

    items.Add(new ReturnItem() 
              { 
                    ID = 2, 
                    Columns = new List<object>() 
                    {
                        DateTime.Now.AddHours(3),
                        "baboon"
                    }
               });

    items.Add(new ReturnItem() 
              { 
                    ID = 3, 
                    Columns = new List<object>() 
                    {
                        DateTime.Now.AddHours(2),
                        "antelope"
                    }
               });


    IEnumerable<ReturnItem> sortedByDate =
        items.OrderBy(x => x.Columns[0]);

    IEnumerable<ReturnItem> sortedByAnimal =
        items.OrderBy(x => x.Columns[1]);

    IEnumerable<ReturnItem> filteredByBaboon =
            items.Where(x => x.Columns[1] == "baboon");
}


public class ReturnItem
{
    public int ID;
    public List<object> Columns;
}

关于c# - 如何使用 LINQ 对 List<ReturnItem> 集合中的项目进行排序和过滤?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2780346/

相关文章:

java - Java 中的排序列表,如 TreeMap 或 SortedSet

c# - .net Lock - 两个问题

c# - EigenObjectRecognizer 与 EigenFaceRecognizer 哪个更好

c# - 以编程方式更改 Windows 7 的 Windows 颜色边框

c# - 如何使用 Linq-To-Sql 在同一查询中进行 TOP、ORDER BY 和 DISTINCT?

c# - Linq动态在哪里算?

c# - ConcurrentDictionary.TryRemove() 什么情况下返回false?

c# - 访问级别和修饰符(私有(private)、密封等)是否在 C# 中用于安全目的?

c# - Linq查询问题

javascript - Backbone.js fetch() 大集合导致脚本卡住