C# 按标识符分组时LINQ到自定义类
我有一个数据表,需要在其中解析为一组可管理的类数据。在大多数情况下,这不是一项困难的任务,但是,我需要将这些自定义类中的项组合在一起,以使它们变得有意义 班级 结果C# 按标识符分组时LINQ到自定义类,c#,linq,class,datatable,datatables,C#,Linq,Class,Datatable,Datatables,我有一个数据表,需要在其中解析为一组可管理的类数据。在大多数情况下,这不是一项困难的任务,但是,我需要将这些自定义类中的项组合在一起,以使它们变得有意义 班级 结果 列表第一个索引将是 姓名:约翰 孩子:苏西4岁,詹姆斯5岁 第二个指标是 姓名:莎莉 孩子:4苏西(葡萄…,哈克…)5詹姆斯(艾文…) 有没有一种不那么麻烦的方法来实现这一点?我目前的方法是抓取每个不同的父ID,将它们链接回子ID,并在那里创建类。我还没有写这部分代码,但如果这是唯一的方法,那就好了。我只是希望LINQ能帮我实现我
列表第一个索引将是
姓名:约翰
孩子:苏西4岁,詹姆斯5岁
第二个指标是
姓名:莎莉
孩子:4苏西(葡萄…,哈克…)5詹姆斯(艾文…)
有没有一种不那么麻烦的方法来实现这一点?我目前的方法是抓取每个不同的父ID,将它们链接回子ID,并在那里创建类。我还没有写这部分代码,但如果这是唯一的方法,那就好了。我只是希望LINQ能帮我实现我的目标 您需要在ParentName上使用一个简单的
GroupBy
,请尝试以下操作:-
var query = dt.AsEnumerable().GroupBy(x => x.Field<string>("ParentName"))
.Select(x => new Parent
{
Name = x.Key,
Child = x.Select(z => new Children
{
ChildID = z.Field<string>("ChildId"),
Name = z.Field<string>("ChildName"),
//If ChildBooks is `String`
ChildBooks = String.Join(",",
x.Select(b => b.Field<string>("Books")))
}).ToList()
});
找到了我需要的最终答案@拉胡辛格引导我走上了正确的道路
var query = dt.AsEnumerable().GroupBy(x => x.Field<int>("Parent ID"))
.Select(x => new Parent
{
ParentId = x.Key,
Children = x.GroupBy(y => y.Field<int>("ChildID")).Select(z => new Children
{
ChildID = z.Key,
Books = z.Select(b => b.Field<int>("Books")).ToList()
}).ToList()
});
var query=dt.AsEnumerable().GroupBy(x=>x.Field(“父ID”))
.选择(x=>新父项
{
ParentId=x.Key,
Children=x.GroupBy(y=>y.Field(“ChildID”))。选择(z=>newchildren
{
ChildID=z.键,
Books=z.Select(b=>b.Field(“Books”).ToList()
})托利斯先生()
});
为什么约翰的孩子Id是4和5?在DataTable中,两个孩子都是4?其他记录也是如此。@Rahussing键入错误。现在更正。好的,我想这就是我需要的,但是如果我们添加public List ChildBooks=new List()代码>到子类?您将如何更改以适应此情况?查看修改后的问题…请检查我的更新,但请注意,由于结果中需要逗号分隔的字符串,因此它将是单个字符串,因此您不需要列表
,而需要字符串
。错误为{“无法将'System.Int32'类型的对象强制转换为'System.string'。“}
您的孩子ID是int
还是string
?您需要相应地更改传递到字段的类型。表中的数据类型为int
。改变了我的课程,工作完美
List<Parent> First index would be
Name: John
Child: 4 Suzy, 5 James
Second index would be
Name: Sally
Child: 4 Suzy (Grapes of..., Huck.....) 5 James (The adven...)
var query = dt.AsEnumerable().GroupBy(x => x.Field<string>("ParentName"))
.Select(x => new Parent
{
Name = x.Key,
Child = x.Select(z => new Children
{
ChildID = z.Field<string>("ChildId"),
Name = z.Field<string>("ChildName"),
//If ChildBooks is `String`
ChildBooks = String.Join(",",
x.Select(b => b.Field<string>("Books")))
}).ToList()
});
ChildBooks = x.Select(b => b.Field<string>("Books")).ToList();
var query = dt.AsEnumerable().GroupBy(x => x.Field<int>("Parent ID"))
.Select(x => new Parent
{
ParentId = x.Key,
Children = x.GroupBy(y => y.Field<int>("ChildID")).Select(z => new Children
{
ChildID = z.Key,
Books = z.Select(b => b.Field<int>("Books")).ToList()
}).ToList()
});