Как использовать LINQ для заполнения объекта списком <int>и строкой? - PullRequest
0 голосов
/ 30 октября 2019

Я использую Entity Framework 6.3 и LINQ для запроса из таблицы и заполнения объекта DTO ниже:

public class MyObject
{
   public string Name { get; set; }
   public List<int> Number { get; set; }

   public MyClass()
   {
       Number = new List<int>();
   }
}

В этой конкретной таблице (устаревший проект), Имя может иметь несколько чисел , поэтому мне нужно использовать его в качестве списка.

Таблица выглядит следующим образом:

Name      Number
abc       15371
abc       15079
abc       15371
abc       30392
xyz       30373
xyz       13141

Мой код на данный момент выглядит какследуйте:

List<MyObjetct> myObject = new List<MyObjetct>();

myObject = contex.TableName.Where(x => listOfNames.Contains(x.Name))
                           .Select( y => new MyObject() 
                           {
                              name = y.name
                              number = *populate the list of numbers*
                           });

Я надеялся заполнить список MyObjects именами и списком чисел.

1 Ответ

4 голосов
/ 30 октября 2019

Попробуйте:

myObject = contex.TableName.GroupBy(t => t.Name)
.Where(g => listOfNames.Contains(g.Key))
.Select(g => new MyObject()
{
    name = g.Key,
    number = g.Select(n => n.Number).ToList()
}).ToList();

Вывод:

Имя / Номера

abc / 15371,15079,15371,30392

xyz / 30373,13141

Я заметил, что в вашем образце данных есть повторяющиеся комбинации имени / номера. Не уверен, что это просто опечатка или вам нужно это учитывать.

...