2009-05-30 7 views
0

J'ai quelques articles appelés tickers qui peuvent être créés et souscrits. Quand ils sont créés, ils ont une portée de 1: privé ou 2: public. Les tickers publics peuvent être souscrits par n'importe qui et les tickers privés peuvent être souscrits par l'invitation du propriétaire. Je veux utiliser LINQ pour obtenir les tickers créés par un utilisateur (c'est-à-dire: avec un certain identifiant de propriétaire) qui sont [1] publics [2] ou auxquels l'utilisateur actuel a souscrit.LINQ: Condition dans le tableau et dans la table connexe

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ù j'essayais d'aller avec. Je suis assez nouveau à LINQ, donc je ne pense pas encore à la bonne façon. Où vais-je mal?

Répondre

2
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)) 
+0

Ceci est bien mais n'est pas limité par l'ID du propriétaire. Je suppose que je peux juste remplacer db.Tickers avec GetTickersByOwnerAll (ownerId) – Dinah

Questions connexes