0

コレクション(別のコレクションを継承する)でプロパティ値を検索したいのですが。

private ObservableCollection<User> userCollection = someData;

public class User
{
    public string Username { get; set; }
    public ObservableCollection<Department> Memberships { get; set; }
}

public class Department
{
    public string Name { get; set; }
}

//I can't use "Contains", because it requires an object of type "Department", but I don't have the object, just the string "Name" (in this case "MyDepartment")
var result = from usr in userCollection where (usr.Memberships.Contains("MyDepartment")) select usr;

何か提案はありますか?

4

3 に答える 3

3

IEnumerable.Anyを使用して、目的を達成します。

例えば ​​:

(from usr in userCollection select usr).
               Any(x=>x.Username.Contains("MyDepartment"))
于 2012-07-23T08:41:20.743 に答える
3

あなたはあなたが望むものを達成するために使用することができ.Any()ますIEnumerable。これはtrue、述語が返すコレクションに1つ以上の要素がある場合に返されますtrue

var result = from usr in userCollection 
             where usr.Memberships.Any(m => m.Name == "MyDepartment")
             select usr;
于 2012-07-23T08:42:10.747 に答える
2

コード例を使用すると、チェック対象の部門の同等の部分を選択して、Containsを実行する新しいコレクションにする必要があります。

var result = from usr in userCollection where (usr.Memberships.Select(m=>m.Name).Contains("MyDepartment")) select usr;

あるいは、-IEnumerable.Anyここでは-よりも優れた構成ですContains-他の回答を参照してください

于 2012-07-23T08:42:14.767 に答える