Бизнес логи c с ProjectTo - PullRequest
       3

Бизнес логи c с ProjectTo

0 голосов
/ 26 марта 2020

Мне нравится использовать ProjectTo с EF Core. Но я не знаю, как решить эту проблему:

У меня есть бизнес-логика c, скажем, у меня есть Post, и я отображаю его в PostListReadModel. Каждый PostListReadModel имеет свойство IsLiked, которое определяет, понравился ли текущий пользователь сообщение или нет. Если бы я использовал Select, это выглядело бы примерно так:

var userId = securityService.GetUserId();

var posts= await appContext.Posts
    .Select(x => new PostListReadModel()
    {
        // Other mapping...
        IsLiked = x.Likes.Any(x => x.UserId == userId)
        // Other mapping...
    })
    .ToListAsync();

Но с ProjectTo я не могу этого сделать. Или другой пример: у меня есть Post, и я также отображаю его в PostListReadModel. Каждый Post имеет свойство Publisher, и я хочу отобразить это свойство только в том случае, если Post.IsAnonymous = false или если текущий пользователь является администратором. С Select я делаю это:

var userId = securityService.GetUserId();
var role = userManager.GetUserRole(userId);
var posts= await appContext.Posts
    .Select(x => new PostListReadModel()
    {
        // Other mapping...
        Publisher = role == RoleType.Admin || !x.IsAnonymous ?
            new PostPublisherReadModel()
            {
                // Other mapping for post publisher...
            } :
            null
        // Other mapping...
    })
    .ToListAsync();

Но с ProjectTo я тоже не знаю, как это сделать!

Так что, может быть, вы скажете мне, как объединить бизнес логи c с проекцией в виде ProjectTo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...