C# 使用Linq中的分组从数据集中填充对象

C# 使用Linq中的分组从数据集中填充对象,c#,linq,C#,Linq,我正在尝试使用Linq将数据从datatable加载到对象。下面是我的情景。我有下表的结构和数据: seq name id类 1拉杰什101 B 1库马尔102 B 1 sandeep 104 A 2 Myur 105 B 2布万106 C 3西拉兹107 A 下面是我的班级结构 public class student { public string name {get;set;} public string id { get; set; } public strin

我正在尝试使用Linq将数据从
datatable
加载到对象。下面是我的情景。我有下表的结构和数据:

seq name id类
1拉杰什101 B
1库马尔102 B
1 sandeep 104 A
2 Myur 105 B
2布万106 C
3西拉兹107 A
下面是我的班级结构

public class student
{
    public string name {get;set;}
    public string id { get; set; }
    public string meritClass { get; set; }
}

public class stdGroup
{
    public int seqId{get;set;}
    public List<student> students;
}
公共班级学生
{
公共字符串名称{get;set;}
公共字符串id{get;set;}
公共字符串meritClass{get;set;}
}
公共类stdGroup
{
public int seqId{get;set;}
公开学生名单;
}
作为最终输出,我应该为每个seq构造一个
Student
stdGroup
对象应通过
seq
[三个对象]分组创建

例如:

stdGroup
对象1将包含3个学生对象

stdGroup
对象2将包含2个学生对象


任何人都可以帮助我。

这应该可以满足您的需要(假设您的意思是DataTable):

现在,进行分组-选择
seq
作为组的键,并为每个条目构建一个student对象,该对象将被分配到相应的组

.GroupBy(a =>  a.Field<int>("Seq"), a => new student() { id = a.Field<string>("Id"), name = a.Field<string>("name"), meritClass = a.Field<string>("class") })
最后,也可以选择转换为列表,而不是可枚举的

.ToList();

您还可以查看我的实现:

public class dbStudent
{
    public int seq;
    public string name;
    public int id;
    public string meritClass;
}

public class student
{
    public string name { get; set; }
    public int id { get; set; }
    public string meritClass { get; set; }
}

public class stdGroup
{
    public int seqId { get; set; }
    public List<student> students { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var dbStudebts = new List<dbStudent>();
        dbStudebts.Add(new dbStudent { seq = 1, name = "Rajesh", id = 101, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 1, name = "kumar", id = 102, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 1, name = "sandeep", id = 104, meritClass = "A" });
        dbStudebts.Add(new dbStudent { seq = 2, name = "Myur", id = 105, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 2, name = "Bhuvan", id = 106, meritClass = "C" });
        dbStudebts.Add(new dbStudent { seq = 3, name = "Siraz", id = 107, meritClass = "A" });

        var result = (from o in dbStudebts
                      group o by new { o.seq } into grouped
                      select new stdGroup()
                      {
                          seqId = grouped.Key.seq,
                          students = grouped.Select(c => new student()
                          {
                              name = c.name,
                              id = c.id,
                              meritClass = c.meritClass
                          }).ToList()
                      }).ToList();
    }
}
公共类dbStudent
{
公共int seq;
公共字符串名称;
公共int id;
公共字符串类;
}
公立班学生
{
公共字符串名称{get;set;}
公共int id{get;set;}
公共字符串meritClass{get;set;}
}
公共类stdGroup
{
public int seqId{get;set;}
公共列表学生{get;set;}
}
班级计划
{
静态void Main(字符串[]参数)
{
var dbStudebts=新列表();
Add(新的dbStudent{seq=1,name=“Rajesh”,id=101,meritClass=“B”});
Add(新的dbStudent{seq=1,name=“kumar”,id=102,meritClass=“B”});
Add(newdbstudent{seq=1,name=“sandeep”,id=104,meritClass=“A”});
Add(新的dbStudent{seq=2,name=“Myur”,id=105,meritClass=“B”});
添加(新的dbStudent{seq=2,name=“Bhuvan”,id=106,meritClass=“C”});
Add(新的dbStudent{seq=3,name=“Siraz”,id=107,meritClass=“A”});
var结果=(来自dbStudebts中的o
按新{o.seq}将o分组为分组
选择新建stdGroup()
{
seqId=grouped.Key.seq,
学生=分组。选择(c=>newstudent()
{
name=c.name,
id=c.id,
meritClass=c.meritClass
})托利斯先生()
}).ToList();
}
}

很高兴看到您尝试过的一些代码。@PiotrWolkowski,很抱歉没有发布我尝试过的代码[我尝试了很多方法,但在选择一种放在这里时感到困惑]。在发布之前,我会仔细检查问题的清晰度、格式和打字错误。这很有效,解决了我的问题。非常感谢。现在我了解了分组的工作原理,谢谢你的解释。谢谢你的帮助。实际上我有数据表,我想直接从中转换。无论如何,我也尝试过你的实现。再次感谢。
.Select(a => new stdGroup() { seqId = a.Key, students = a.ToList() })    
.ToList();
public class dbStudent
{
    public int seq;
    public string name;
    public int id;
    public string meritClass;
}

public class student
{
    public string name { get; set; }
    public int id { get; set; }
    public string meritClass { get; set; }
}

public class stdGroup
{
    public int seqId { get; set; }
    public List<student> students { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        var dbStudebts = new List<dbStudent>();
        dbStudebts.Add(new dbStudent { seq = 1, name = "Rajesh", id = 101, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 1, name = "kumar", id = 102, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 1, name = "sandeep", id = 104, meritClass = "A" });
        dbStudebts.Add(new dbStudent { seq = 2, name = "Myur", id = 105, meritClass = "B" });
        dbStudebts.Add(new dbStudent { seq = 2, name = "Bhuvan", id = 106, meritClass = "C" });
        dbStudebts.Add(new dbStudent { seq = 3, name = "Siraz", id = 107, meritClass = "A" });

        var result = (from o in dbStudebts
                      group o by new { o.seq } into grouped
                      select new stdGroup()
                      {
                          seqId = grouped.Key.seq,
                          students = grouped.Select(c => new student()
                          {
                              name = c.name,
                              id = c.id,
                              meritClass = c.meritClass
                          }).ToList()
                      }).ToList();
    }
}