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?

Était-ce utile?

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
scroll top