私は、オブジェクトへのLINQは、結合されたデータの異なる実行のための素晴らしい方法だと思った。現実には、それは物事を行うには悪い道を付属しています...ここでオブジェクトにLinq - boondoggle?
は、それに対応し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ないし持つ、私たちが持っていたものですそれをすることについて偉大になるはずですか?実際に 、次は
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)
// . . . . . .
実際には60倍の速さ、はるかに高速に動作します。そして、私はthis article
Q出くわし:単一LINQを放棄せずに、このクエリを改善する方法はありますか?
これは、パフォーマンスが低下している場合、結合形式のオブジェクトに対するLINQを回避し、いくつかの順次呼び出しで置き換える必要があることを意味しますか?
は 'A'、 'B'、および 'C'に参加します。 'where'の代わりに[' Join'](https://docs.microsoft.com/en-gb/dotnet/api/system.linq.enumerable.join?view=netframework-4.7)関数を使ってみましたか? ? – Reddog
LINQをあまり積極的にペシマイズすることを検討してください。 "私は間違いがないので、フレームワークを壊す必要があります"というのは通常、始めるのに最適な場所ではありません。 –
@EdPlunkettください。私はそれが壊れているとは言いません。しかし、オプティマイザが必要なので、それはあまり仕事をしていないようです。 –