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