У меня есть этот запрос для получения списка статей.Если статья IsLocked
, она должна быть включена в список только в том случае, если она была создана авторизованным администратором:
List<Article> articles = await db
.Articles
.Where(a => a.IsLocked
? a.CreatedBy.Id == LoggedInAdminUserId
: true)
.ToListAsync();
Но, как и сейчас, любой авторизованный администратор может видеть все заблокированные.статьи, независимо от того, кто их создал.
Как мне изменить мой запрос?
** РЕДАКТИРОВАТЬ **
Приведенный выше запрос является сокращенной версией.Вот полный запрос:
List<Article> dbm = await db.Articles
.Where(s =>
(!s.IsLocked || s.CreatedBy.Id == LoggedInAdminUserId) &&
s.Title.Contains(search) ||
s.PreTitle.Contains(search) ||
s.Preamble.Contains(search) ||
s.MainText.Contains(search) ||
s.CreatedBy.Member.FirstName.Contains(search) ||
s.CreatedBy.Member.LastName.Contains(search) ||
s.EditedBy.Member.FirstName.Contains(search) ||
s.EditedBy.Member.LastName.Contains(search) ||
s.FrontPageItem.PublishedBy.Member.FirstName.Contains(search) ||
s.FrontPageItem.PublishedBy.Member.LastName.Contains(search)
)
.Include(f => f.FrontPageItem)
.Include(e => e.CreatedBy)
.ThenInclude(m => m.Member)
.Include(e => e.EditedBy)
.ThenInclude(m => m.Member)
.Include(p => p.PublishReadyBy)
.ThenInclude(m => m.Member)
.Include(o => o.ArticleOperations)
.OrderByDescending(s => s.DateCreated)
.ToListAsync();
РЕДАКТИРОВАТЬ 2
Хорошо, поэтому я думаю, что уже довольно поздно, и мои глаза действительно косоглазые.Добавление набора () вокруг всех .Contains()
сделало это:
.Where(s =>
(!s.IsLocked || s.CreatedBy.MemberId == AdminUserMemberId) &&
(s.Title.Contains(search) ||
s.PreTitle.Contains(search) ||
s.Preamble.Contains(search) ||
s.MainText.Contains(search) ||
s.CreatedBy.Member.FirstName.Contains(search) ||
s.CreatedBy.Member.LastName.Contains(search) ||
s.EditedBy.Member.FirstName.Contains(search) ||
s.EditedBy.Member.LastName.Contains(search) ||
s.FrontPageItem.PublishedBy.Member.FirstName.Contains(search) ||
s.FrontPageItem.PublishedBy.Member.LastName.Contains(search))
)