Как создать собственный C# Automapper для запроса groupBy LINQC#

Место общения программистов C#
Ответить
Anonymous
 Как создать собственный C# Automapper для запроса groupBy LINQ

Сообщение Anonymous »

Я новичок в использовании библиотеки AutoMapper для моего конкретного случая использования.
Данные передаются из модели хранимых процедур в репозитории в службу, где они сопоставляются с dto для возврата в интерфейс.
Это модель:

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

 [NotMapped]
public class CashOrder
{
public Guid Id { get; set; }

public DateTime? DateCreated { get; set; }

public DateTime? DateFinalised { get; set; }

public string? ReferenceNumber { get; set; }

public int DenominationOptionId { get; set; }

public decimal? FaceValue { get; set; }

public int? NumberOrdered { get; set; }
}
Это DTO

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

 class CashOrderDto
{
public DateTime? DateCreated { get; set; }

public DateTime? DateFinalised { get; set; }

public string? ReferenceNumber { get; set; }

public IEnumerable DenominationDetails { get; set; } = Enumerable.Empty();
}
DenominationDetailsDto имеет список DenominationOptionId, FaceValue и NumberOrdered, который связан с конкретным заказом.
Проблема, с которой я столкнулся, заключается в том, что я получить мои данные из хранимой процедуры, которая объединяет таблицы для получения списка заказов и их номиналов.
данные содержат несколько заказов, в которых DateCreated, DateFinalized и ReferenceNumber одинаковы, Детали номинала — это то, что отличается от строки к строке (поскольку в одном заказе может быть много номиналов).
Как я могу сделать что-то подобное с помощью automapper? Возможно ли это вообще?

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

            return model
.GroupBy(cashOrder => cashOrder.Id)
.Select(cashOrderGroup => new CashOrderClearanceDto
{
DateCreated = cashOrderGroup.First().DateCreated,
DateFinalised = cashOrderGroup.First().DateFinalised,
ReferenceNumber = cashOrderGroup.First().ReferenceNumber,
DenominationDetails = cashOrderGroup.Select(cashOrder => new DenominationDetailsDto
{
DenominationOptionId = cashOrder.DenominationOptionId,
FaceValue = cashOrder.FaceValue,
NumberHeld = cashOrder.NumberOrdered
}).ToList()
}).ToList(); // or FirstOrDefault for getting one specific item.

Я пробовал несколько способов, но проблема с automapper заключается в том, что я не могу взять весь список объектов (вы всегда получите список модели из хранимой процедуры). и объединить их в одно поле в зависимости от значения.
Будем очень благодарны за любую помощь.

Подробнее здесь: https://stackoverflow.com/questions/790 ... linq-query
Ответить

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

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

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

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

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