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

linq 查询 有关问题

2012-10-06 
linq 查询 问题求助请教各位大仙,如何通过linq查询将 左边的DataTable 合并成右侧 table其中每行中列S_XM,

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

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

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

如下图



S_XMI_NLS_BHI_SLS_XMI_NLS_BH I_SL
张三23H0011张三 23H001,H0023
张三23H0022李四 22H210,H220,H230 5
李四22H2102王五 21H992 1
李四22H2202
李四22H2301
王五21H9921


[解决办法]

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()) }

热点排行