2017-03-28 51 views
1

有一個User實體,我有一個User對象的列表。 User實體看起來是這樣的:LINQ中Intersect()的不同版本

public class User{ 

public int Id {get; set;} 

public List<Group> Groups {get; set;} 

} 

和組級看起來是這樣的:

public class Group{ 

public int Id {get; set;} 

public string GroupName {get; set;} 

} 

最後我有串名單是這樣的:

List<string> GroupNames; 

我有一個列表的User對象。我想選擇其組包含Group對象的用戶對象,該對象的名稱在列表GroupNames中。 例如,如果GroupNames包含紐約市,芝加哥,西雅圖,我想挑選其組的GroupName等於任何這些城市的用戶。在代碼它看起來像這樣:

List<string> GroupNames = new List<string> { "NYC", "Chicago","Seattle"}; 

var filteredUsers = Users.Where(x => x.Groups....)// I don't know what to write in this query. 

你能幫我寫這個查詢嗎?我感謝任何幫助,謝謝。

回答

2

的LINQ應使用Any()Contains()解決售後服務這個簡單的結合Any()Contains()

var filteredUsers = Users.Where(x => x.Groups.Any(y => GroupNames.Contains(y.GroupName))); 
+0

事實上,這個查詢給我一個錯誤。謝謝。 – jason

+0

此查詢可以在Async方法中使用嗎? – jason

+1

@jason是肯定它可以 – fubo

1

你可以這樣做:

var filteredUsers = Users.Where(t => t.Groups.Any(q => GroupNames.Contains(q.GroupName)); 

這幾乎是相同的伏波山的答案。

希望它有幫助!

1

另一種可能性是使用Intersect() + Any()(但要注意使用的.Select(x => x.GroupName)只選擇GroupName

var filteredUsers = Users.Where(x => x.Groups.Select(x => x.GroupName).Intersect(GroupNames).Any());