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; }
[解决办法]
[解决办法]
不好意思,看错意思了。
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()) }