Как добавить проекцию в агрегацию с помощью конвейераC#

Место общения программистов C#
Ответить
Anonymous
 Как добавить проекцию в агрегацию с помощью конвейера

Сообщение Anonymous »

У меня есть следующий класс модели и его DTO:

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

public class User
{
public string FullName { get; set; }
public string DomainEmail { get; set; }
}

public class UserDto
{
public string Name { get; set; }
public string Email { get; set; }
}
И мне нужно выполнить этот запрос с агрегацией:

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

var matchStage = new BsonDocument(Match, new BsonDocument
{
{  nameof(User.FullName), new BsonDocument(Eq, "Foo bar") }
});

var pipeline = new[] { matchStage };

var result = await _collection.Aggregate(pipeline).ToListAsync();

return result;
Моя проблема в том, что я не знаю, как сопоставить свойства моей модели с моим dto. Это простой пример, но в моем реальном сценарии моя модель имеет более 25 полей, а запрос действительно больше. Я создал проекцию, но не знаю, как применить ее к моему .Aggregate:

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

var projection = Builders.Projection.Expression(m => new UserDto
{
Name = m.FullName,
Email = m.DomainEmail
});

var result = await _collection
.Aggregate(pipeline)
.Project(projection) // This doesn't work
.ToListAsync();

return result;
Сопоставленные классы:

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

CreateMap()
.ForMember(u => u.Name, opts => opts.MapFrom(u => u.FullName))
.ForMember(u => u.Email, opts => opts.MapFrom(u => u.DomainEmail));
Есть ли способ решить эту проблему?
  • .NET 8
  • Драйвер MongoDB версии 2.24


Подробнее здесь: https://stackoverflow.com/questions/782 ... h-pipeline
Ответить

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

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

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

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

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