【发布时间】:2017-11-06 18:28:27
【问题描述】:
给定以下三个列表:
var FirstNames = new List<string>(){ "Bob", "Sondra", "Avery", "Von", "Randle", "Gwen", "Paisley" };
var LastNames = new List<string>(){ "Anderson", "Carlson", "Vickers", "Black", "Schultz", "Marigold", "Johnson" };
var Birthdates = new List<DateTime>()
{
Convert.ToDateTime("11/12/1980"),
Convert.ToDateTime("09/16/1978"),
Convert.ToDateTime("05/18/1985"),
Convert.ToDateTime("10/29/1980"),
Convert.ToDateTime("01/19/1989"),
Convert.ToDateTime("01/14/1972"),
Convert.ToDateTime("02/20/1981")
};
我想将它们组合成一个新的泛型类型,其中列表共享的关系是它们在集合中的位置。即 FirstNames[0]、LastNames[0]、Birthdates[0] 是相关的。
所以我想出了这个 LINQ,与索引匹配,现在似乎工作正常:
var students = from fn in FirstNames
from ln in LastNames
from bd in Birthdates
where FirstNames.IndexOf(fn) == LastNames.IndexOf(ln)
where FirstNames.IndexOf(fn) == Birthdates.IndexOf(bd)
select new { First = fn, Last = ln, Birthdate = bd.Date };
但是,我强调测试了这段代码(每个List<string> 和List<DateTime> 都加载了几百万条记录)并且遇到了SystemOutOfMemory 异常。
有没有其他方法可以写出这个查询来更有效地使用 Linq 获得相同的结果?
【问题讨论】: