C# 筛选一大串对象

C# 筛选一大串对象,c#,C#,我试图从一个包含142000个对象的大型IEnumerable中检索名称列表。对于 不知什么原因。。操作超时,留下不完整的姓名列表。是 在下面的代码中,有一种更好更快的方法来完成我正在做的事情: IEnumerable<MyClass> table = GetAll(); // Get All returns an IEnumerable<MyClass> IEnumerable<string> allNames = new List<string&g

我试图从一个包含142000个对象的大型IEnumerable中检索名称列表。对于 不知什么原因。。操作超时,留下不完整的姓名列表。是 在下面的代码中,有一种更好更快的方法来完成我正在做的事情:

IEnumerable<MyClass> table = GetAll(); // Get All returns an IEnumerable<MyClass>

IEnumerable<string> allNames = new List<string>();
allNames = table.Where(r => listOfIds.Contains(r.id)).Select(r => r.name);
IEnumerable table=GetAll();//获取一个IEnumerable的所有返回
IEnumerable allNames=新列表();
allNames=table.Where(r=>listOfIds.Contains(r.id)).Select(r=>r.name);
感谢您的帮助


Ted

这应该更有效:

List<String> allNames = (from id in listOfIds
                         join t in table on id equals t.id
                         select t.name).ToList();
List allNames=(来自listOfIds中的id)
在id等于t.id的表中连接t
选择t.name).ToList();

顺便说一句,
Join
在这里比上面的
Where
快1262个,有142000个对象和50000个ID


79millis与99705millis

这应该更有效:

List<String> allNames = (from id in listOfIds
                         join t in table on id equals t.id
                         select t.name).ToList();
List allNames=(来自listOfIds中的id)
在id等于t.id的表中连接t
选择t.name).ToList();

顺便说一句,
Join
在这里比上面的
Where
快1262个,有142000个对象和50000个ID


79millis vs.99705millis

GetAll()看起来怎么样?你的瓶颈可能在那里。GetAll()看起来如何?你的瓶颈可能就在那里。我刚看了你的链接问题,发现它很有趣。然而,随着我对它的深入了解,我意识到您所指的(LINQ到数据集和LINQ到对象)与我所假设的非常不同,即LINQ到SQL和LINQ到实体。所以这只是一个警告,标题是误导性的。如果使用Linq to Entities或SQL,查询实际上是在SQL端构建的,因此否定了连接对where的许多性能好处。@Joe:为什么标题有误导性?LINQ与SQL/实体之间没有关系。除此之外,OP正在使用LINQ To对象;)是的,我知道我在这里可能有点迂腐,OP使用linq to objects,但是当我读到linq join比where快,我是
表的大量用户。where(condition)
我想,哇,我刚刚发现了一个很棒的速度升级。当我读到它之后,我意识到我应该读它,因为Linq到对象/数据集的连接比where快得多。关键是,并非所有linq都是如此。旁白:在此之前,我不知道linq到对象、数据集和实体之间的区别。我只是看了一下你的链接问题,发现它非常有趣。然而,随着我对它的深入了解,我意识到您所指的(LINQ到数据集和LINQ到对象)与我所假设的非常不同,即LINQ到SQL和LINQ到实体。所以这只是一个警告,标题是误导性的。如果使用Linq to Entities或SQL,查询实际上是在SQL端构建的,因此否定了连接对where的许多性能好处。@Joe:为什么标题有误导性?LINQ与SQL/实体之间没有关系。除此之外,OP正在使用LINQ To对象;)是的,我知道我在这里可能有点迂腐,OP使用linq to objects,但是当我读到linq join比where快,我是
表的大量用户。where(condition)
我想,哇,我刚刚发现了一个很棒的速度升级。当我读到它之后,我意识到我应该读它,因为Linq到对象/数据集的连接比where快得多。关键是,并非所有linq都是如此。旁白:在此之前,我不知道linq到对象与数据集与实体之间的区别。