2017-03-28 5 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内にその名前を持つGroupオブジェクトを含むUserオブジェクトを選択したいと思います。 たとえば、GroupNamesにNYC、Chicago、Seattleが含まれている場合、グループの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()を使用することによってそれを行うことができますContains()

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

実際には、このクエリは私にエラーを与えています。ありがとう。 – jason

+0

このクエリはAsyncメソッド内で使用できますか? – jason

+1

@jasonはいできること – fubo

1

Any()を組み合わせることにより、この簡単にsloveする必要があります

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

これはfuboの答えとほぼ同じです。

希望すると助かります!

1

もう一つの可能​​性はIntersect() + Any()を使用して(ただしGroupNameのみ選択することが.Select(x => x.GroupName)の使用を注意してください)

var filteredUsers = Users.Where(x => x.Groups.Select(x => x.GroupName).Intersect(GroupNames).Any()); 
関連する問題