首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

关于linq的Distinct有关问题

2013-08-04 
关于linq的Distinct问题现在有一张表,如下所示产品id颜色尺寸型号1红色5*6型号11红色10*10型号21黑色5*6型

关于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.尺寸);
            }

热点排行