LINQ:Condición en la mesa y en la tabla relacionada
-
06-09-2019 - |
Pregunta
Tengo algunos artículos llamados los tickers que puede ser creado y el suscrito.Cuando se crean, tienen un alcance de 1:privado o 2:público.Pública de los tableros pueden ser suscrito por cualquier persona y privada de los tableros pueden ser suscrito por el propietario de la invitación.
Quiero usar LINQ para obtener los tableros creados por un usuario (es decir:con un cierto número de identificación del titular) que [1] son públicas [2] han sido suscritos por el usuario actual.
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));
}
La última línea es incorrecta, pero se puede ver de donde yo estaba tratando de ir con él.Soy bastante nuevo para LINQ así que no estoy completamente de pensar de la manera correcta todavía.A donde voy mal?
Solución
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))
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow