C# 多表LinqToSql聚合函数

C# 多表LinqToSql聚合函数,c#,linq-to-sql,C#,Linq To Sql,我花了很长时间才把这个问题弄对,所以我希望StackOverflow能为我指明正确的方向 我有三张桌子: 地区(TerritoryId、TerritoryName等) 用户区域(只是一个gerrund) 用户(用户ID、用户名、状态ID) 我需要获取所有有一个或多个StatusId为(比方说)3的用户的区域 我真正能够编译的就是链接所有的表:( IEnumerable territions=(从t开始,以db.territions为单位 将t.TerritoryId等于uXt.UserID的

我花了很长时间才把这个问题弄对,所以我希望StackOverflow能为我指明正确的方向

我有三张桌子:

  • 地区(TerritoryId、TerritoryName等)
  • 用户区域(只是一个gerrund)
  • 用户(用户ID、用户名、状态ID)
我需要获取所有有一个或多个StatusId为(比方说)3的用户的区域

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

IEnumerable territions=(从t开始,以db.territions为单位
将t.TerritoryId等于uXt.UserID的db.User_x_区域中的uXt加入tJoin
来自tJoin.DefaultIfEmpty()中的uXt
在数据库中加入u。uXt.UserID上的用户等于在uJoin中加入u.Id
来自uJoin.DefaultIfEmpty()中的u
选择t);
有人能帮我吗?我在网上找到的都是相当基本的例子。

试一试

(from u in users where u.StatusId==3 
    join ut in userTerritories on u.UserId equals ut.UserId 
    join t in territories on ut.TerritoryId equals t.TerritoryId 
    group t by t into gg select gg.Key)
试一试

(from u in users where u.StatusId==3 
    join ut in userTerritories on u.UserId equals ut.UserId 
    join t in territories on ut.TerritoryId equals t.TerritoryId 
    group t by t into gg select gg.Key)
它的工作原理如下:)

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

更新:如果您喜欢,请使用查询语法

var territories = from t in context.Territories
                  where t.UserTerritories.Any(ut=>ut.User.StatusId == 3))
                  select t;
它的工作原理如下:)

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

更新:如果您喜欢,请使用查询语法

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

如果你有多个符合条件的用户在同一地区,这难道不会给你一个笛卡尔产品吗?@Adam I更新了它,使其更有意义,但精神仍然存在:只要通过关系检查是否有任何用户的状态id为3:)如果您有多个符合条件的用户具有相同的地域,这不会给您一个笛卡尔产品吗?@Adam I更新了它,使其更有意义,但精神仍然存在:只需通过关系检查是否有任何用户通过状态id为3的关系:)您的答案也很有效,但另一个答案更简洁(令人惊讶地)更快。同意;如果另一个答案同样有效,那么它更具可读性。你的答案也有效,但另一个答案更为简洁,而且(令人惊讶地)更快。同意;如果另一个也能起作用,那么它更具可读性。