linq
には実行に時間がかかりすぎる(2分以上)大きな結合ステートメントがあります。データベースが正しく設定され、データが正しく取得されているかどうか試してみる方法でしたが、プロジェクトはほぼ完了しており、そのような遅延は受け入れられません。linqで効率的に文字列を結合するには?
問題はむしろ明らかにString.Join
のステートメントですが、私は別の方法でそれを行う方法を知らないので、私の質問はどのように同じ情報を得るためにリンクステートメントを変更することができますが、より速い方法です。私は、参加する必要があるエンティティの1つを作成する際に、データに参加して別の場所に格納するほうが効果的かもしれないと考えていましたが、可能であれば、このステートメントをより良くする方がよいでしょう。
「B」又は「M」など
var dc = datacontext;
var resultSet = (
from r in dc.requests
select new ProjectQueryElement {
bKey = String.Join("|", dc.comps
.Where(
x => x.reRequestId == r.requestId && x.function == "b"
).Select(x => x.idNumber)
),
mKey = String.Join("|", dc.comps
.Where(
x => x.reRequestId == r.requestId && x.function == "m"
).Select(x => x.idNumber)
),
oKey = String.Join("|", dc.comps
.Where(
x => x.reRequestId == r.requestId && x.function == "o"
).Select(x => x.idNumber)
),
pKey = String.Join("|", dc.comps
.Where(
x => x.reRequestId == r.requestId && x.function == "p"
).Select(x => x.idNumber)
),
rKey = String.Join("|", dc.comps
.Where(
x => x.reRequestId == r.requestId && x.function == "r"
).Select(x => x.idNumber)
)
}
);
resultSet
は、グリッドの行としてjqgrid
に渡されるの機能をProjectQueryElement
ための構成要素を持たないことが可能です。
を私はあなただけの要素を気にすることを考えると、 'r'と' dc.comps'の間の結合を導入することから始めたいです'dc.comps'ここで' reRequestId'は 'r.requestId'です...しかし、あなたはSQLの外観を見ましたか? –
Jon Skeetの答えに加えて、私は 'StringBuilder'を導入し、それらの助けを借りて文字列を構築することを提案します。 – ckruczek
Manfredの回答のコメントを参照してください。@ckruczek –