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怎么做啊?谢谢了,着急!

解决方案 »

  1.   

    从来没用Linq操作过DataSet,尝试了一下,不难:
    为了方便,我给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;
        }

     
      

  2.   

    我好像搞错了一点,你前3条和后3条是一条记录?MasterID相同的是一条记录?你自己改改吧,都写到这一步了,不可能还不会吧
      

  3.   

    这个不对啊MasterObj应该按MasterID    Group by
      

  4.   

    http://kb.cnblogs.com/page/42690/?page=2
      

  5.   

    居然说没人帮忙?我忙得要死,而且对DataSet不熟,边学边给你写,居然说没人帮忙开始看着以为是300分,结果才30分,真不值!算了,帮人帮到低,代码给你
    不用给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 只有一行代码,我容易吗我...
      

  6.   

    另外,这个地方:
    name =(string)g.First().Field<string>(1)
    (string)可以不要,我忘了删了
      

  7.   

    using System;
    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;
            }    }
    }
      

  8.   

    改了一点儿展现,应该没问题了~~using System;
    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;
            }    }
    }