LINQ:表和相关表中的条件

时间:2009-05-30 14:52:10

标签: linq linq-to-sql .net-3.5

我有一些名为 tickers 的项目,可以创建和订阅。创建它们时,它们的范围为1:private或2:public。公共代码可以由任何人订阅,私人代码可以由所有者邀请订阅。

我想使用LINQ来获取用户创建的代码(即:具有某个所有者ID),[1]是公共[2]已被当前用户订阅。

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很新,所以我还没有想到它是正确的方法。我哪里错了?

1 个答案:

答案 0 :(得分: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))