Мне нравится использовать 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