ЛИНК:Состояние в таблице и в связанной таблице

StackOverflow https://stackoverflow.com/questions/929858

  •  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))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top