我希望您能够通过IEnumerable对象中的特定属性对其进行过滤。我希望可以选择通过一个或多个属性值进行过滤,但是想要过滤多少个值(以及哪些值)只有在运行时才知道。
好的,为了举例说明,收集到的对象可能是以下结构体:
现在我想使用Linq语句来过滤我的wantedPeople,使其只包括裁缝和间谍的条目。我知道我可以使用where子句,但我不知道如何调整它以获得我想要的结果(并且以下操作不是我想要的,因为它仅适用于上面的wantedProfessions集合(例如,此集合将在运行时更改):)。
好的,为了举例说明,收集到的对象可能是以下结构体:
public struct Person
{
public string Name { get; set; }
public string Profession{ get; set; }
}
下面是我填充了一些随机值的列表,可以使用这个结构体:
List<Person> people= new List<Person>;
people.Add(new Person(){Name = "Mickey", Profession="Tinker"};
people.Add(new Person(){Name = "Donald", Profession="Tailor"};
people.Add(new Person(){Name = "Goofy", Profession="Soldier"};
people.Add(new Person(){Name = "Pluto", Profession="Spy"};
这些内容会先被转移到一个 IEnumerable 中。
var wantedPeople = from n in this.people select n;
假设一个用户只对"裁缝"和"间谍"这两个职业感兴趣,并通过某种GUI技巧创建了以下集合:
List<string> wantedProfessions = new List<string>();
wantedProfessions.Add("Tailor");
wantedProfessions.Add("Spy");
现在我想使用Linq语句来过滤我的wantedPeople,使其只包括裁缝和间谍的条目。我知道我可以使用where子句,但我不知道如何调整它以获得我想要的结果(并且以下操作不是我想要的,因为它仅适用于上面的wantedProfessions集合(例如,此集合将在运行时更改):)。
wantedPeople = from n in wantedPeople
where n.Profession == wantedProffessions[0] || n.Profession == wantedProffessions[1]
select n;