【发布时间】:2010-01-21 17:37:42
【问题描述】:
我正在尝试找到使用 C# (3.5) 过滤列表的最佳方法,但我似乎找不到任何与我的情况相似的示例。我愿意使用 lambdas 或 linq。
与我发现的大多数示例相比,独特之处在于我的列表项每个都有子数组,例如...
var employees= new List<Employee>
{
new Employee{Name = "John",Nicknames="'J','Big J','Big John'"},
new Employee{Name = "Joshua",Nicknames="'J','Josh','Joshman'"},
}
然后我想像这样过滤该列表...
//using linq
var matchesByNickname =
from worker in employees
where worker.Nicknames.Equals("J")
select worker;
//or lambda
var employees2 = employees
.Where(e => Nicknames.Exists(n => n.Nickname == "J"))
当然,由于 Nicknames 本身就是一个数组,我不能使用 .Equals 或 .Contains 等。过滤这种类型的列表的最佳方法是什么?
更新: 为了让我的例子简单,我误导了你一点。列表项上确实有真正的对象数组,而不是字符串。我的真实示例是自定义产品对象列表。 product 对象上有一个 Regions 属性,它是 Region 对象的列表。一个产品可以没有、1 个或多个区域。区域对象具有名称和 ID。 所以我真正想要的是为分配到某个区域的任何产品过滤产品列表。
【问题讨论】:
-
为什么不能将
Nicknames设为数组或列表? -
据我所知,“昵称”不是一个数组,而是一个字符串。
标签: c# arrays list generics findall