我正在使用存储过程从SQL Server获取DataTable。下面显示了数据的简化版本
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID");
dt.Columns.Add("CustomerID");
dt.Columns.Add("CustomerState");
dt.Columns.Add("CustomerCity");
// DataRow row1 = table1.NewRow();
object[] o = { 1, 1, "TX", "Austin" };
dt.Rows.Add(o);
object[] o1 = { 2, 2, "AZ", "Phoenix" };
dt.Rows.Add(o1);
object[] o2 = { 2, 3, "OK", "Oklahoma" };
dt.Rows.Add(o2);
object[] o3 = { 2, 4, "CO", "Denver" };
dt.Rows.Add(o3);
object[] o4 = { 3, 1, "TX", "Austin" };
dt.Rows.Add(o4);
我计划按ProductID
对数据进行分组。分组后,每个ProductID
应该只有一行。如果有多个ProductID
,那么其他列应该用分号分隔,如下所示:
| 产品编号|客户ID|客户状态|客户城市|
| - -----|- -----|- -----|- -----|
| 1| 1| TX|奥斯汀|
| 2|二、三、四|AZ;OK;CO|Phoenix城;俄克拉荷马州;丹佛|
| 3| 1| TX|奥斯汀|
我认为这是ADO.NET做不到的。所以我开始使用LINQ,如下所示。然而
DataTable dt = ProcessData();//Data is from the above code where the DataTable is created and populated manually
var results = from p in dt.AsEnumerable()
group p by p.Field<string>("Productid") into g
select new
{
productid = g.Key,
items = g.ToList(),
//customerid = g.Field<string>("customerid"),
//customerstate = g.Field<string>("customerstate"),
//customercity = g.Field<string>("customercity")
};
我不得不注解掉三行,因为我得到了以下错误:
CS 1929:“IGrouping<string,DataRow>”不包含“Field”的定义,并且最佳扩展方法重载“DataRowExtensions.Field(DataRow,DataColumn)”需要类型为
1条答案
按热度按时间2hh7jdfx1#
您可以使用下面的代码在LINQ中基于组进行连接