LINQ - 包含?

时间:2012-07-23 08:39:48

标签: c# linq

我想在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;

你有什么建议吗?

3 个答案:

答案 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更好的构造 - 请参阅其他答案

相关问题