多表LinqToSql聚合函数

时间:2009-04-16 13:35:38

标签: c# linq-to-sql

我一直在努力获得这个查询,所以我希望StackOverflow可以指出我正确的方向。

我有三张桌子:

  • 地区(TerritoryId,TerritoryName等)
  • UserTerritories(只是一个未成年人)
  • 用户(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);

任何人都可以帮助我吗?我在网上找到的所有内容都是相当基本的例子。

2 个答案:

答案 0 :(得分:4)

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;

答案 1 :(得分:2)

试一试......

(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)