如何在按一对列分组时将一组值作为列表获取

本文关键字:一组 获取 列表 | 更新日期: 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 )
                              });
}