2009-05-30 11 views
0

私はティッカーと呼ばれるいくつかのアイテムを作成し、購読することができます。作成時には、1:プライベートまたは2:パブリックのスコープがあります。公開ティッカーは誰でも購読することができ、プライベートティッカーはオーナーの招待によって購読することができます。LINQ:テーブルと関連テーブルの条件

LINQを使用して、現在のユーザーが[2]が購読しているユーザーによって作成されたテロップを取得します(つまり、特定の所有者IDを持つ)。

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にはかなり新しいので、それはまだ正しい方法とは思えません。どこが間違っていますか?

答えて

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

これはいいですが、オーナーIDによって制限されていません。私はdbTickersをGetTickersByOwnerAll(ownerId)に置き換えることができると思います – Dinah

関連する問題