【发布时间】:2014-06-20 10:06:46
【问题描述】:
我有一个人员列表,我想使用 LINQ(查询语法)来获取一个包含所有名字和所有第二个名字的匿名类型。
如果我要使用 foreach:
var firstNames = new HashSet<string>();
var secondNames = new HashSet<string>();
foreach (Person p in ListOfPersons)
{
firstNames.Add(p.firstName);
secondNames.Add(p.secondName);
}
什么是返回匿名类型的等效且高效的 LINQ 语句?例如,allNames.FirstNames 和 allNames.SecondNames。
编辑:当我说高效时,我的意思是它在 ListOfPersons 上循环一次,就像上面的 foreach 示例一样。
编辑 2:名称应该不同;我在 foreach 示例中将 List 更改为 HashSet
【问题讨论】:
-
问题 - 如果你返回一个匿名类型,为什么你需要 2 个变量,
firstNames和secondNames? -
你是所有的名字还是只是不同的名字?
-
@Enigmativity 好点,是的,不同的名字
-
@cyrus - 然后你的效率就超出了迭代的范围。使用 Atomosk 的解决方案,对于来自真实世界数据库(已被带入内存)的一些数据,我可以提取名称是 10.5 毫秒,但要使它们不同,我需要更进一步41.3 毫秒。迭代原始源两次以生成不同的列表只需要 48.3 毫秒。这是迭代两次优于一次的情况。