Запрос LINQ с вложенным списком с использованием GroupBy и FirstC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Запрос LINQ с вложенным списком с использованием GroupBy и First

Сообщение Anonymous »

У меня есть хранящаяся процедура, возвращая результаты в объекте FlaggedCardto :

Код: Выделить всё

public class FlaggedCarDTO
{
public int CarId { get; set; }
public int FlagUserId { get; set; }
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public int ImageId { get; set; }
public string ImageName { get; set; }
}
< /code>
Вот несколько примеров данных: < /p>
var query = new List()
{
new FlaggedCarDTO() { CarId = 1, FlagUserId = 22, Year = 2020, Make = "Toyota", Model = "Camry", ImageId = 1, ImageName = "01.jpg" },
new FlaggedCarDTO() { CarId = 1, FlagUserId = 22, Year = 2020, Make = "Toyota", Model = "Camry", ImageId = 2, ImageName = "02.jpg" },
new FlaggedCarDTO() { CarId = 1, FlagUserId = 46, Year = 2020, Make = "Toyota", Model = "Camry", ImageId = 1, ImageName = "01.jpg" },
new FlaggedCarDTO() { CarId = 1, FlagUserId = 46, Year = 2020, Make = "Toyota", Model = "Camry", ImageId = 2, ImageName = "02.jpg" },
new FlaggedCarDTO() { CarId = 6, FlagUserId = 67, Year = 2016, Make = "Honda", Model = "Civic", ImageId = 18, ImageName = "54.jpg" },
new FlaggedCarDTO() { CarId = 6, FlagUserId = 67, Year = 2016, Make = "Honda", Model = "Civic", ImageId = 19, ImageName = "55.jpg" }
};
Я хочу сформировать эти данные, чтобы отобразить только первую запись для каждого карида в эти объекты:

Код: Выделить всё

public class FlaggedCar
{
public int Id { get; set; }
public int FlagUserId { get; set; }
public int Year { get; set; }
public string Make { get; set; }
public string Model { get; set; }
public List Images { get; set; }
}

public class Image
{
public int Id { get; set; }
public string Name { get; set; }
}
< /code>
Вот мой запрос LINQ: < /p>
var result = query.GroupBy(x => x.CarId)
.Select(grp => grp.Select(c => new FlaggedCar()
{
Id = c.CarId,
FlagUserId = c.FlagUserId,
Year = c.Year,
Make = c.Make,
Model = c.Model,
Images = grp.Select(i => new Image()
{
Id = i.ImageId,
Name = i.ImageName,
}).ToList(),
}).First()).ToList();
< /code>
Вот результат (сериализован для читаемости): < /p>
[
{
"Id": 1,
"FlagUserId": 22,
"Year": 2020,
"Make": "Toyota",
"Model": "Camry",
"Images": [
{
"Id": 1,
"Name": "01.jpg"
},
{
"Id": 2,
"Name": "02.jpg"
},
{
"Id": 1,
"Name": "01.jpg"
},
{
"Id": 2,
"Name": "02.jpg"
}
]
},
{
"Id": 6,
"FlagUserId": 67,
"Year": 2016,
"Make": "Honda",
"Model": "Civic",
"Images": [
{
"Id": 18,
"Name": "54.jpg"
},
{
"Id": 19,
"Name": "55.jpg"
}
]
}
]
Это почти то, что мне нужно, но изображения не выбирают только из первой записи. Обратите внимание, что Camry , изображения включают из обеих записей. Я думаю, что. First () требуется в вложенном списке изображений , но я не уверен, где его добавить?

Подробнее здесь: https://stackoverflow.com/questions/796 ... -and-first
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»