这很难解释。

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

我们在以下方面取得了一些进展:

  • 我们从基本的 DataTable 开始。
  • 然后我们处理 DataTable,为每一行创建一个新的“ReturnItem”对象
  • 这个“ReturnItem”对象只有两个属性:ID(字符串)和列(列表(对象))。属性集合的每一列包含一个条目,代表单个 DataRow。
  • 每个属性都是强类型的(int、string、datetime 等)。例如,它会将一个新的“DateTime”对象添加到包含“Created”数据表列的值的“ReturnItem”列列表中。
  • 结果是一个 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/

    10-10 14:10