LINQ: Condition dans le tableau et dans le tableau connexe
-
06-09-2019 - |
Question
J'ai quelques articles appelés tickers qui peuvent être créées et souscrites. Quand ils sont créés, ils ont une portée de 1: privé ou 2: public. tickers publiques peuvent être souscrites par personne et tickers privé peuvent être souscrites par invitation du propriétaire.
Je veux utiliser LINQ pour obtenir les tickers créés par un utilisateur (par exemple: avec un certain id propriétaire). Qui soit [1] sont publiques [2] ont été souscrites par l'utilisateur actuel
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));
}
Cette dernière ligne est incorrecte mais vous pouvez voir où je voulais aller avec elle. Je suis assez nouveau pour LINQ, donc je ne pense pas tout à fait encore de la bonne façon. Où vais-je tort?
La solution
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))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow