2009-04-16 83 views
1

我一直有一段時間讓這個查詢正確,所以我希望StackOverflow可以指出我在正確的方向。Multi-Table LinqToSql Aggregate Function

我有三個表:

  • 地區(的TerritoryID,TerritoryName等)
  • UserTerritories(只是gerrund)
  • 用戶(用戶ID,用戶名,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); 

任何人都可以幫我嗎?我在網上找到的所有東西都是相當基本的例子。

回答

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; 
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) 
+0

你的回答工作也一樣,但對方的回答更conscise和(奇怪)更快。 – 2009-04-16 14:16:33

+0

同意;如果另一個也可以工作,那麼它更具可讀性。 – 2009-04-16 14:17:44