ЛИНК:Состояние в таблице и в связанной таблице
-
06-09-2019 - |
Вопрос
У меня есть некоторые предметы под названием тикеры который можно создать и на который можно подписаться.При создании они имеют область действия 1:частная или 2:публичная.На публичные тикеры может подписаться кто угодно, а на частные тикеры — по приглашению владельца.
Я хочу использовать LINQ для получения тикеров, созданных пользователем (т. е.:с определенным идентификатором владельца), которые либо [1] являются общедоступными, либо [2] подписаны текущим пользователем.
TickerUser Ticker
========== ======
TickerUserId <-- TickerId
TickerId OwnerId
UserId ScopeId
public IQueryable<Ticker> GetTickersByOwnerAll(int ownerId) {
return from ticker in db.Tickers
where ticker.OwnerId == ownerId
select ticker;
}
/// THIS PART IS INCORRECT -- DO NOT USE
public IQueryable<Ticker> GetTickersByOwnerVisible(int ownerId) {
int currId = CurrentUser.GetCurrentUser().ID;
return GetTickersAll(ownerId)
.Where(t => t.ScopeId == 2)
.Where(t => t.TickerUsers.Where(tu => tu.UserId == currId));
}
Последняя строка неверна, но вы можете видеть, чего я пытался этим добиться.Я новичок в LINQ, поэтому пока не совсем правильно об этом думаю.Где я ошибаюсь?
Решение
db.Tickers.Where(t =>
// The ticker is public...
(t.ScopeId == 2)
// ...or any of the ticker users is the current user.
|| t.TickerUsers.Any(tu => tu.UserId == currId))
Не связан с StackOverflow