【发布时间】:2014-06-21 06:28:41
【问题描述】:
我想通过它正在收集的任何对象的特定属性来过滤 IEnumerable 对象。我希望选择按一个或多个属性值进行过滤但只有在运行时才能知道要过滤的值(以及哪些值)。
好的,举个例子,收集的对象可以是以下结构:
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;
【问题讨论】: