DataSet 有一个表如下:
MasterID MasterName slaveID, slaveName
1 "1" 11 "11"
1 "1" 12 "12"
1 "1" 13 "13"
2 "2" 21 "21"
2 "2" 22 "22"
3 "2" 23 "23"
class Masterobj
{
public int id;
public stirng name;
public List<slaveobj) parts;
}class slaveobj
{
public int id;
public string name;
}想通过上面那个表返回MasterObj的集合。
用LInQ怎么做啊?谢谢了,着急!
MasterID MasterName slaveID, slaveName
1 "1" 11 "11"
1 "1" 12 "12"
1 "1" 13 "13"
2 "2" 21 "21"
2 "2" 22 "22"
3 "2" 23 "23"
class Masterobj
{
public int id;
public stirng name;
public List<slaveobj) parts;
}class slaveobj
{
public int id;
public string name;
}想通过上面那个表返回MasterObj的集合。
用LInQ怎么做啊?谢谢了,着急!
为了方便,我给slaveobj类添加了一个构造函数 DataTable dt = new DataTable();
dt.Columns.Add("MasterID");
dt.Columns.Add("MasterName");
dt.Columns.Add("slaveID");
dt.Columns.Add("slaveName");
dt.Rows.Add(1, "1", 11, "11");
dt.Rows.Add(1, "1", 12, "12");
dt.Rows.Add(1, "1", 13, "13");
dt.Rows.Add(2, "2", 21, "21");
dt.Rows.Add(2, "2", 22, "22");
dt.Rows.Add(3, "2", 23, "23");
var v = from item in dt.AsEnumerable() select new Masterobj { id = (int)item[0], name = (string)item[1], parts = new List<slaveobj> { new slaveobj((int)item[2], (string)item[3]) } };
class Masterobj
{
public int id;
public string name;
public List <slaveobj> parts;
} class slaveobj
{
public int id;
public string name;
public slaveobj(int id,string name)
{
this.id=id;
this.name=name;
}
}
啊
不用给slaveobj加构造函数了,请删除:
DataTable dt = new DataTable();
dt.Columns.Add("MasterID",typeof(int));
dt.Columns.Add("MasterName",typeof(string));
dt.Columns.Add("slaveID",typeof(int));
dt.Columns.Add("slaveName",typeof(string));
dt.Rows.Add(1, "1", 11, "11");
dt.Rows.Add(1, "1", 12, "12");
dt.Rows.Add(1, "1", 13, "13");
dt.Rows.Add(2, "2", 21, "21");
dt.Rows.Add(2, "2", 22, "22");
dt.Rows.Add(3, "2", 23, "23");
var v = from item in dt.AsEnumerable() group item by item.Field<int>(0) into g select new Masterobj { id = g.Key, name =(string)g.First().Field<string>(1), parts = new List<slaveobj> (from i in g select new slaveobj{id=i.Field<int>(2),name=i.Field<string>(3) }) };
为了简洁,整个Linq 只有一行代码,我容易吗我...
name =(string)g.First().Field<string>(1)
(string)可以不要,我忘了删了
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;namespace TestLinq
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("MasterID",typeof(int));
dt.Columns.Add("MasterName",typeof(string));
dt.Columns.Add("slaveID",typeof(int));
dt.Columns.Add("slaveName",typeof(string));
dt.Rows.Add(1, "1", 11, "11");
dt.Rows.Add(1, "1", 12, "12");
dt.Rows.Add(1, "1", 13, "13");
dt.Rows.Add(2, "2", 21, "21");
dt.Rows.Add(2, "2", 22, "22");
dt.Rows.Add(3, "2", 23, "23"); var query =
from
n in dt.AsEnumerable()
group n by new{ MasterID=n["MasterID"],MasterName=n["MasterName"] } into g
select new Masterobj
{
id = int.Parse(g.Key.MasterID.ToString()),
name = g.Key.MasterName.ToString(),
parts = (from slave in g
select new slaveobj
{
id = slave.Field<int>("slaveID"),
name = slave.Field<string>("slaveName")
}).ToList<slaveobj>()
};
Masterobj mo = query.ToList<Masterobj>()[0];
Console.WriteLine("id:{0},name:{1},slaveCount:{2}",mo.id,mo.name,mo.parts.Count);
Console.Read(); } class Masterobj
{
public int id;
public string name;
public List<slaveobj> parts;
} class slaveobj
{
public int id;
public string name;
} }
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;namespace TestLinq
{
class Program
{
static void Main(string[] args)
{
DataTable dt = new DataTable();
dt.Columns.Add("MasterID",typeof(int));
dt.Columns.Add("MasterName",typeof(string));
dt.Columns.Add("slaveID",typeof(int));
dt.Columns.Add("slaveName",typeof(string));
dt.Rows.Add(1, "1", 11, "11");
dt.Rows.Add(1, "1", 12, "12");
dt.Rows.Add(1, "1", 13, "13");
dt.Rows.Add(2, "2", 21, "21");
dt.Rows.Add(2, "2", 22, "22");
dt.Rows.Add(3, "2", 23, "23"); var query =
from
n in dt.AsEnumerable()
group n by new{ MasterID=n["MasterID"],MasterName=n["MasterName"] } into g
select new Masterobj
{
id = int.Parse(g.Key.MasterID.ToString()),
name = g.Key.MasterName.ToString(),
parts = (from slave in g
select new slaveobj
{
id = slave.Field<int>("slaveID"),
name = slave.Field<string>("slaveName")
}).ToList<slaveobj>()
};
foreach (var mo in query)
{
Console.WriteLine("Masterobj");
Console.WriteLine("id: {0},name:{1}", mo.id,mo.name);
Console.WriteLine("slaveobj");
foreach (var so in mo.parts)
{
Console.WriteLine("id: {0},name:{1}", so.id, so.name);
}
Console.WriteLine("====================================");
}
Console.Read(); } class Masterobj
{
public int id;
public string name;
public List<slaveobj> parts;
} class slaveobj
{
public int id;
public string name;
} }
}