【问题标题】:LINQ: Condition in table and in related tableLINQ:表和相关表中的条件
【发布时间】:2009-05-30 14:52:10
【问题描述】:

我有一些名为 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 还很陌生,所以我还没有想到正确的方法。我哪里错了?

【问题讨论】:

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


    【解决方案1】:
    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))
    

    【讨论】:

    • 这很好,但不受所有者 ID 的限制。我想我可以用 GetTickersByOwnerAll(ownerId) 替换 db.Tickers
    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多