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()
     });