这很难解释。
我们有一个数据表,其中包含用户可配置的列选择,这些列在编译时是未知的。 DataTable 中的每一列都是字符串类型。我们需要将此 DataTable 转换为“ReturnItem”对象的强类型集合,以便我们可以使用 LINQ 进行排序和过滤,以便在我们的应用程序中使用。
我们取得了一些进展:
- 我们从基本的 DataTable 开始。
- 然后我们处理 DataTable,为每一行创建一个新的“ReturnItem”对象
- 这个“ReturnItem”对象只有两个属性:ID (string) 和 Columns(List(object))。属性集合包含每一列的一个条目,代表一个数据行。
- 每个属性都是强类型的(整数、字符串、日期时间等)。例如,它会将一个新的“DateTime”对象添加到“ReturnItem”列列表中,其中包含“Created”数据表列的值。
- 结果是一个 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/