【发布时间】:2018-03-03 10:54:09
【问题描述】:
我认为 LINQ to objects 是不同执行连接数据的好方法。实际上,这是一种糟糕的做事方式......
这就是我们所拥有的,在 a,b,c,d 中相应地有几条、几百条、3K 和 3.5K 条记录
IEnumerable<MyModel> data =
(from a in AList
from b in BList.Where(r => r.AId == a.Id)
from c in CList.Where(r => r.BId == b.Id)
from d in DList.Where(r => r.SomeId == myId && r.Some2Id == c.Some2Id)
// . . . . . .
难道 LINQ 不应该做得很好吗? 实际上,following 的工作速度要快得多,实际上快 60 倍
var dTemp = DList.Where(r => r.SomeId == myId).ToList();
var cTemp = CList.Where(c => dTemp.Any(d => d.Some2Id == c.Some2Id)).ToList();
IEnumerable<MyModel> data =
(from a in AList
from b in BList.Where(r => r.AId == a.Id)
from c in cTemp.Where(r => r.BId == b.Id)
// . . . . . .
然后我遇到了this article
问:有没有办法在不放弃单个 LINQ 的情况下改进此查询?
或者这是否意味着如果性能受到威胁,需要避免使用连接形式的 LINQ to 对象并用一些顺序调用来代替?
【问题讨论】:
-
您似乎正在尝试内联
a、b和c。您是否尝试过使用Join函数而不是where的函数? -
考虑不那么激进地悲观您的 LINQ。 “我是万无一失的,所以框架必须被打破”通常不是最好的起点。
-
@EdPlunkett 请。我从不说它坏了。但看起来,由于需要优化器,它并不能很好地完成这项工作
-
@Reddog 是的,现在我们正在对此进行优化。那只是不好的做法。在某些情况下,它的工作原理相同,但
join更快
标签: c# .net linq linq-to-objects