Преобразование Datatable во вложенный список / объект с использованием C # - PullRequest
0 голосов
/ 16 октября 2019

У меня есть данные, как это. enter image description here и модель данных как

public class Details
    {

        public String Id { get; set; }
        public String Type { get; set; }
        public String Name { get; set; }
        public String Terms { get; set; }
        public List<FAQ> Faqs { get; set; }
    }

    public class FAQ
    {
        public string Question { get; set; }
        public string Answer { get; set; }
    }

Я хочу преобразовать ее в список типов деталей, таких как List<Details> detatilsList; Я пытался вот так, но строки повторяются. Если я удаляю Детали, я получаю отчетливый результат, но не могу преобразовать его в тип Подробности из-за анонимного исключения приведения

 var details = dt.AsEnumerable().GroupBy(x =>
                new Details //removing this detail gives distinct record as expected. But can not cast
                {
                    ID= x.Field<decimal>("ID"),
                    NAME = x.Field<string>("NAME"),
                    TYPE = x.Field<string>("TYPE"),
                    TERMS = x.Field<string>("TERMS")
                })
            .Select(x =>
                new
                {
                    x.Key.ID,
                    x.Key.NAME,
                    x.Key.TYPE,
                    x.Key.TERMS,
                    Faqs =
                    x.Select(
                        s => new Faq {Question = s.Field<string>("QUESTION"), Answer = s.Field<string>("ANSWER")})

                }).ToList();

Как я могу исправить это и преобразовать в Список деталей

1 Ответ

1 голос
/ 16 октября 2019

Вы можете группировать By по анонимному объекту по нескольким ключам, а затем выбрать необходимые столбцы из DataTable

. Приведенный ниже код сначала группирует данные, используя ID, Name, Type и * 1007. * и позже в предложении Select создает новый Details объект.

 var details = dt.AsEnumerable().GroupBy(x =>
            new
            {
                ID= x.Field<decimal>("ID"),
                NAME = x.Field<string>("NAME"),
                TYPE = x.Field<string>("TYPE"),
                TERMS = x.Field<string>("TERMS")
            })
        .Select(x =>
            new Details
            {
                x.Key.ID,
                x.Key.NAME,
                x.Key.TYPE,
                x.Key.TERMS,
                Faqs =
                x.Select(
                    s => new Faq {Question = s.Field<string>("QUESTION"), Answer = s.Field<string>("ANSWER")}).ToList()
            }).ToList();

Еще один момент: если Id сам по себе уникален, вам не нужно группировать по нескольким столбцам, вы можете группировать только по ID.

...