日期:2014-05-17  浏览次数:20890 次

linq 查询 问题求助
请教各位大仙,

如何通过linq查询将 左边的DataTable 合并成右侧 table

其中每行中列S_XM,I_NL相同的分组 ,将I_SL相加,每行中S_BH按照逗号分隔显示成一行

如下图



S_XM I_NL S_BH I_SL S_XM I_NL S_BH I_SL
张三 23 H001 1 张三 23 H001,H002 3
张三 23 H002 2 李四 22 H210,H220,H230 5
李四 22 H210 2 王五 21 H992 1
李四 22 H220 2
李四 22 H230 1
王五 21 H992 1


------解决方案--------------------
C# code


        static void Main(string[] args)
        {
           DataTable mytable=new DataTable();
            mytable.Columns.Add("str",typeof(string));
            mytable.Columns.Add("in",typeof(int));
            mytable.Columns.Add("str2",typeof(string));
            mytable.Columns.Add("in2",typeof(int));

            for(int i=0;i<4;i++)
            {
                DataRow myrow=mytable.NewRow();
                myrow["str"]="AAAA";
                myrow["in"]=10;
                myrow["str2"]="row"+i.ToString();
                myrow["in2"]=i;
                mytable.Rows.Add(myrow);
            }

            DataTable my = fun(mytable);

            foreach (var a in my.AsEnumerable())
            {
                foreach (var b in a.ItemArray)
                {
                    Console.Write("{0}   ", b.ToString());
                }
                Console.WriteLine();
            }
            

        }


        public static DataTable fun(DataTable mytable)
        {
            for (int i = 0; i < mytable.Rows.Count; i++)
            {
                for (int j = i + 1; j < mytable.Rows.Count; j++)
                {
                    if (mytable.Rows[i]["str"].ToString() == mytable.Rows[j]["str"].ToString() && mytable.Rows[i]["in"].ToString() == mytable.Rows[j]["in"].ToString())
                    {
                        mytable.Rows[i]["str2"] = mytable.Rows[i]["str2"].ToString() + mytable.Rows[j]["str2"].ToString();
                        mytable.Rows[i]["in2"] = Convert.ToInt32(mytable.Rows[i]["in2"]) + Convert.ToInt32(mytable.Rows[j]["in2"]);
                        mytable.Rows[j].Delete();
                        j--;
                    }
                }
            }
            return mytable;
        }

------解决方案--------------------
探讨
请教各位大仙,

如何通过linq查询将 左边的DataTable 合并成右侧 table

其中每行中列S_XM,I_NL相同的分组 ,将I_SL相加,每行中S_BH按照逗号分隔显示成一行

如下图



S_XM I_NL S_BH I_SL S_XM I_NL S_BH I_SL
张三 23 H001 1 张三 23 H001,H002 3
张三 23 H002 2 ……

------解决方案--------------------
不好意思,看错意思了。



var q=from t in tb group t by new {t.S_XM,t.I_NL}
into tmp
select new {S_XM=tmp.Key.S_XM, I_NL=tmp.Key.I_NL,I_SL=tmp.Max(t=>{return t.I_SL;},S_BH=string.Join(",",tmp.Select(t=>{return t.S_BH;}).ToArray()) }