使用 Linq 中的分组从数据集中填充对象
Fill object from dataset using grouping in Linq
我正在尝试使用 Linq 将数据从 datatable
加载到对象。下面是我的场景。我有以下 table 结构和数据:
seq name id class
1 Rajesh 101 B
1 kumar 102 B
1 sandeep 104 A
2 Myur 105 B
2 Bhuvan 106 C
3 Siraz 107 A
下面是我的class结构
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;
}
作为最终输出,我应该为每个序列构建一个 Student
。 stdGroup
对象应按 seq
[三个对象] 分组创建。
示例:
stdGroup
对象 1 将包含 3 个学生对象
stdGroup
对象 2 将包含 2 个学生对象
谁能帮帮我。
这应该可以满足您的需求(假设您指的是 DataTable DataTable):
List<stdGroup> stdGroups = myDataTable
.AsEnumerable()
.GroupBy(a => a.Field<int>("Seq"), a => new student() { id = a.Field<string>("Id"), name = a.Field<string>("name"), meritClass = a.Field<string>("class") })
.Select(a => new stdGroup() { seqId = a.Key, students = a.ToList() })
.ToList();
要分解它,首先,让数据表行进入我们可以使用 linq 的状态,
.AsEnumerable()
现在,进行分组 - 选择 seq
作为组的键,并为每个条目构建一个学生对象,该对象将被分配到相应的组。
.GroupBy(a => a.Field<int>("Seq"), a => new student() { id = a.Field<string>("Id"), name = a.Field<string>("name"), meritClass = a.Field<string>("class") })
现在,为每个组创建 stdGroup
对象,并从我们的组键中填充 seq
属性,获取每个组的内容,并将其分配给students
属性.
.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();
}
}
我正在尝试使用 Linq 将数据从 datatable
加载到对象。下面是我的场景。我有以下 table 结构和数据:
seq name id class
1 Rajesh 101 B
1 kumar 102 B
1 sandeep 104 A
2 Myur 105 B
2 Bhuvan 106 C
3 Siraz 107 A
下面是我的class结构
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;
}
作为最终输出,我应该为每个序列构建一个 Student
。 stdGroup
对象应按 seq
[三个对象] 分组创建。
示例:
stdGroup
对象 1 将包含 3 个学生对象
stdGroup
对象 2 将包含 2 个学生对象
谁能帮帮我。
这应该可以满足您的需求(假设您指的是 DataTable DataTable):
List<stdGroup> stdGroups = myDataTable
.AsEnumerable()
.GroupBy(a => a.Field<int>("Seq"), a => new student() { id = a.Field<string>("Id"), name = a.Field<string>("name"), meritClass = a.Field<string>("class") })
.Select(a => new stdGroup() { seqId = a.Key, students = a.ToList() })
.ToList();
要分解它,首先,让数据表行进入我们可以使用 linq 的状态,
.AsEnumerable()
现在,进行分组 - 选择 seq
作为组的键,并为每个条目构建一个学生对象,该对象将被分配到相应的组。
.GroupBy(a => a.Field<int>("Seq"), a => new student() { id = a.Field<string>("Id"), name = a.Field<string>("name"), meritClass = a.Field<string>("class") })
现在,为每个组创建 stdGroup
对象,并从我们的组键中填充 seq
属性,获取每个组的内容,并将其分配给students
属性.
.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();
}
}