我有以下记录的数据表

Columns -> A B C D E
Rows->     1 2 3 X Y
           1 2 3 P Q


我希望将此数据表转换为如下的自定义列表

MyClass
{
int A
int B
int C
List<ChildClass>
}

ChildClass
{
String D
String E
}


我正在使用以下代码来实现它,但我在子类之间陷入了困境。请帮忙?

IList<MyClass> items = dt.AsEnumerable().Select(row =>
    new MyClass
        {
            A= row.Field<int>("A"),
            B= row.Field<int>("B"),
            C= row.Field<int>("C"),
        }).ToList();

最佳答案

您应该使用GroupBy。类似于以下内容。

IList<MyClass> items = dt.AsEnumerable().GroupBy(
    row =>
        new
        {
            A = row.Field<int>("A"),
            B = row.Field<int>("B"),
            C = row.Field<int>("C"),
        },
    (key, values) =>
        new MyClass
        {
            A = key.A,
            B = key.B,
            C = key.C,
            Children = values.Select(row =>
                new ChildClass
                {
                    D = row.Field<string>("D"),
                    E = row.Field<string>("E"),
                }).ToList()
        }).ToList();


在您的示例中,这将导致一个MyClass对象(具有属性值1、2、3)和内部的两个ChildClass对象(分别具有属性值X,Y和P,Q)。

关于c# - 如何将数据表记录转换为自定义类?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18879817/

10-13 09:46