2014-03-19 53 views
0

我有一個列表,其中包含一些軟件包ID。LINQ SQL contains全部

List<int> mustHavePackages = GetMustHavePackages(); 

和數據庫表

public class Table 
{ 
public int UserID; 
public int PackageID; 
} 

而且我想從數據庫中獲取,那些有mustHavePackages列表中的所有套餐用戶。

現在我只取得了所有用戶,即至少有一個包從mustHavePackages列表中。

List<int> users = 
(from t in db.Table 
where mustHavePackages.Contains(t.PackageID) 
select t.UserID).ToList(); 

現在我正在尋找像ContainsAll或類似的東西。

任何幫助將不勝感激。

回答

1
var temp= 
(from t in db.Table 
group t by t.UserId into g 
select new {UserId = g.Key, PackageIds = g.Select(gg=>gg.PackageId)}).ToList(); 

var users = (from t in temp 
      where !mustHavePackages.Except(t.PackageIds).Any() 
      select t.UserId).ToList(); 

也許是這樣的。您也可以在第一部分中添加第二部分,以便撥打一個電話並且不會帶來額外的數據,這是爲了向您展示故障。

+0

謝謝你,這段代碼幾乎和預期的一樣,但我忘了提及那些擁有mustHavePackages列表中的所有包以及更多的包(可以說是可選包)的用戶也應該被選中。此代碼選擇具有完全相同包的所有用戶。 – user3232395

+0

更新了處理該代碼的代碼,您可以將.Except –