我想在Collection(继承另一个Collection)中搜索属性值。
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;
你有什么建议吗?
答案 0 :(得分:3)
使用IEnumerable.Any来实现您的目标。
例如:
(from usr in userCollection select usr).
Any(x=>x.Username.Contains("MyDepartment"))
答案 1 :(得分:3)
您可以在.Any()
上使用IEnumerable
来实现您的目标。如果集合中有一个或多个元素,谓词返回true
,则会返回true
。
var result = from usr in userCollection
where usr.Memberships.Any(m => m.Name == "MyDepartment")
select usr;
答案 2 :(得分:2)
使用您的代码示例 - 您需要选择要检查的部门的等效部分到新的集合中,然后运行Contains。
var result = from usr in userCollection where (usr.Memberships.Select(m=>m.Name).Contains("MyDepartment")) select usr;
或者 - IEnumerable.Any
是比Contains
更好的构造 - 请参阅其他答案