2012-07-23 67 views
0

我想在一个集合(继承另一个集合)中搜索属性值。LINQ - 包含在?

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; 

您有什么建议吗?

回答

3

使用IEnumerable.Any来实现你想要的。

例如:

(from usr in userCollection select usr). 
       Any(x=>x.Username.Contains("MyDepartment")) 
3

你可以使用上IEnumerable.Any()才达到你想要什么。如果集合中有一个或多个元素(谓词返回true),这将返回true

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

使用你的代码示例 - 你需要选择你正在检查的部门的等效部分到一个新的集合中,然后运行Contains。

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

或者 - IEnumerable.Any是一个更好的构建在这里比Contains - 看其他答案