我一直很想弄清楚这个查询,所以我希望StackOverflow可以为我指明正确的方向。

我有三个表:


地区(TerritoryId,TerritoryName等)
UserTerritories(仅是Gerrund)
用户(UserId,UserName,StatusId)


我需要获取所有一个或多个用户的StatusId为(假设为3)的领土。

我真正能够编译的是将所有表链接起来:(

IEnumerable<Territory> territories = (from t in db.Territories
                                      join uXt in db.User_x_Territories on t.TerritoryId equals uXt.UserID into tJoin
                                      from uXt in tJoin.DefaultIfEmpty()
                                      join u in db.Users on uXt.UserID equals u.Id into uJoin
                                      from u in uJoin.DefaultIfEmpty()
                                      select t);


谁能帮我吗?我在网上能找到的都是相当基本的例子。

最佳答案

var territories = context.Territories
    .Where(t=> t.UserTerritories.Any(ut=>ut.User.StatusId == 3));


它的工作原理如下:)

只需获取与所需条件匹配的区域即可,该区域将使任何用户的状态ID为3。使用该关系可简化许多查询。

更新:如果您更喜欢查询语法

var territories = from t in context.Territories
                  where t.UserTerritories.Any(ut=>ut.User.StatusId == 3))
                  select t;

08-03 22:12