这很难解释。
我们有一个DataTable,它包含用户可配置的列选择,这些列在编译时是未知的。 DataTable中的每一列都是String类型。我们需要将此DataTable转换为强类型的“ReturnItem”对象集合,以便我们可以使用LINQ对我们的应用程序进行排序和过滤。
我们取得了一些进展如下:
我们一直在使用LINQ动态查询库,它让我们到目前为止,但它看起来不像前进的道路,因为我们在列表对象集合中使用它。
基本上,我的问题归结为:我如何使用LINQ,根据作为ReturnItem类的一部分的List(object)属性中的值对List(ReturnItem)集合中的项进行排序和过滤? / p>
答案 0 :(得分:3)
我不确定我是否理解问题所在。假设您知道要排序的列的索引并且它们是相当简单的类型,那么您不能只做类似的事情......
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;
}
答案 1 :(得分:0)
测试一下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
List<ReturnItem> list = new List<ReturnItem>();
list.Add(new ReturnItem(1, "mouse", DateTime.Now));
list.Add(new ReturnItem(2, "mickey",DateTime.Now));
list = list.OrderBy(i => i._column._name).ToList();
list.ForEach(i => Console.WriteLine(i._column._name));
Console.Read();
}
}
class ReturnItem
{
public int _id;
public Columns _column;
public ReturnItem(int id, string name, DateTime date)
{
_id = id;
_column = new Columns(name, date);
}
}
class Columns
{
public string _name;
public DateTime _date;
public Columns(string name, DateTime date)
{
_name = name;
_date = date;
}
}
}