2012-04-12 115 views
0

我使用以下LINQ表達式過濾列表:Lambda表達式,並加入

var query = 
    follows 
     .Where(i => i.EUser.EProviders != null) 
     .Join(
     ids, 
     i => i.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook).First().Ip, 
     j => j.Ip, 
     (i, j) => i); 

的查詢工作,但我得到了第一個()的關鍵字的一個問題,因爲我只是比較第一個元素,當我需要比較任何類型的臉譜提供者。我試圖得到所有以下至少有一個Facebook類型的提供者,而提供者ID包含在ID中。

我認爲這是工作,但我不滿意查詢。看起來不對我。

follows 
.Where(i => i.EUser.EProviders != null) 
.Where(i => i.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook && ids.Select(k => k.Ip).Contains(j.Ip)).Count() > 0); 
+7

你能解釋一下你想用這個查詢得到什麼結果嗎? – Ryan 2012-04-12 23:02:24

回答

0

也不是很清楚,但似乎你想要一個給定的ip列表中包含某個提供者類型的追隨者列表。

var ids = ids.Select(m => m.Ip).ToList(); 

var query = follows.Where(i => i.EUser.EProviders.Any(m => m.ProviderType ==EProvider.EnumProviderType.Facebook && ids.Contains(m.Ip))); 
+0

看編輯,如果你希望至少有一個來自Eproviders的EProvider元素有一個Facebook ProviderType。如果這不是你想要的......你想要什麼? – 2012-04-13 15:31:29

+0

再次編輯,然後,最後我會明白 – 2012-04-13 15:38:01

+0

抱歉man = \我的英語不太好= \ – user1330271 2012-04-13 15:40:14

0

尚不清楚你想要什麼,但你可能想使用...

follows.SelectMany(f=>f.EUser.EProviders.Where(j => j.ProviderType == EProvider.EnumProviderType.Facebook)) 

或類似的東西。

如果你不想只是'第一'你使用了一個錯誤的操作符。

+0

我仍然需要檢查Facebook的類型提供者是否包含在ID中。 – user1330271 2012-04-13 15:24:39