C# 使用Linq中的分组从数据集中填充对象
我正在尝试使用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
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();
}
}