如何在按一对列分组时将一组值作为列表获取
本文关键字:一组 获取 列表 | 更新日期: 2023-09-27 18:10:01
我有一个具有以下值的数据表
id名称日期
1 a 5/3/2011
1 a 6/4/2011
我想检索带有每个id/name对的关联日期列表的值。
我建议您创建一个封装所有这些数据的类,然后您可以创建适当类型的List<T>
。您将为DataTable
中的每个条目创建一个新类的实例。
如果你使用强类型数据集,你可以使用生成的DataRow
类型代替,如果你想。
(不清楚您所说的"作为单个条目存储在列表中"是指整个表还是每行一个条目?)
没有上下文很难回答这个问题。这是否会被正确地使用,并与系统的其他部分进行沟通。下面假设它没有与系统的其他部分通信
var list = (from e in DataTable.Rows.AsEnumerable()
select new {
id = e["id"],
Name = e["Name"],
data = e["data"]
}).ToList()
创建一个映射到表的类。您可以使用EntityFramework, LINQ to SQL, nHibernate或自定义ORM从表中检索数据作为这些对象。选择对象并使用LINQ分组操作符创建匿名对象(或另一个具有日期列表的类)。
public class Foo
{
public int ID { get; set; }
public sring Name { get; set; }
public DateTime Date { get; set;
}
public class Bar
{
public int ID { get; set; }
public string Name { get; set; }
public List<DateTime> Dates { get; set; }
}
public class FooDataContext : DbContext
{
IDbSet<Foo> Foos { get; set; }
}
using (var context = new FooDataContext())
{
List<Bar> bars = context.Foos
.GroupBy( f => new { f.ID, f.Name } )
.Select( g => new Bar
{
ID = g.Key.ID,
Name = g.Key.Name,
Dates = g.Select( f => f.Date )
});
}