linq distinct
场景:关于linq的Distinct有关问题
关于linq的Distinct问题
现在有一张表,如下所示
产品id 颜色 尺寸 型号
1 红色 5*6 型号1
1 红色 10*10 型号2
1 黑色 5*6 型号1
1 白色 10*10 型号2
2 ..
现在想搜出来产品id为1的所有颜色;所有尺寸;所有型号,不重复。用linq怎么写呢
如显示时是 产品id1,颜色有:红色;黑色;白色
尺寸有:5*6;10*10
...
------解决方案--------------------
关于linq的Distinct问题
现在有一张表,如下所示
产品id 颜色 尺寸 型号
1 红色 5*6 型号1
1 红色 10*10 型号2
1 黑色 5*6 型号1
1 白色 10*10 型号2
2 ..
现在想搜出来产品id为1的所有颜色;所有尺寸;所有型号,不重复。用linq怎么写呢
如显示时是 产品id1,颜色有:红色;黑色;白色
尺寸有:5*6;10*10
...
LINQ
------解决方案--------------------
DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("产品id"));
dt.Columns.Add(new DataColumn("颜色"));
dt.Columns.Add(new DataColumn("尺寸"));
dt.Columns.Add(new DataColumn("型号"));
dt.Rows.Add(new object[] { 1, "红色", "5*6", "型号1" });
dt.Rows.Add(new object[] { 1, "红色", "10*10", "型号2" });
dt.Rows.Add(new object[] { 1, "黑色", "5*6", "型号1" });
dt.Rows.Add(new object[] { 1, "白色", "10*10", "型号2" });
var dtquery = from d in dt.AsEnumerable()
group d by d.Field<string>("产品id") into temp
select new
{
产品id=temp.Key,
颜色 = string.Join(";", temp.Select(x => x.Field<string>("颜色")).Distinct().ToArray()),
尺寸 = string.Join(";", temp.Select(x => x.Field<string>("尺寸")).Distinct().ToArray())
};
foreach (var qt in dtquery)
{
Console.WriteLine(qt.产品id+"\t"+qt.颜色+"\t"+qt.尺寸);
}