2012-01-06 9 views
1

私はほぼ同じ2つの方法を持っています。唯一のdfferneceはwhere句(およびメソッド名)です。私はちょうど簡略化されたlinqクエリを含んでいます。where句が異なる箇所で同じlinqクエリの近くでリファクタリングする

from tableA in db.tableA 
join tableB in db.tableB on tableA.id equals tableB.id 
where tableB.ref == "blah" 
select tableA 

from tableA in db.tableA 
join tableB in db.tableB on tableA.id equals tableB.id 
where tableB.refb == "blah" 
select tableA 

私はどこの変更を行うことができます方法はありますか?私はそこに結果が返された後、クエリからどこに削除することができます知っている.notationをフィルタに使用します。 (私はtableBから必要なフィールドが返されることを確認するためにいくつかの他のものを行う必要があります)。

良い方法がありますか?私は2つのlinqクエリを持っていることが重要ですか?

+0

これらは別々の通話が必要ですか? tableB.ref == "blah"のどこで使うことはできませんか? tableB.refb == "blah" –

答えて

2

はいこの

var data = from tableA in db.tableA 
      join tableB in db.tableB on tableA.id equals tableB.id 
      select tableA 

var one = data.Where(x=>x.ref == "blah"); 
var two = data.Where(x=>x.refb == "blah"); 

にあなたが1 palceに照会し、ちょうどパフォーマンスが問題でない限り、彼らは今のように、メインクエリ

+0

これは、結果セット全体(前のクエリによって返されたもの)でメモリ内サブクエリを実行しているため、パフォーマンスに影響する可能性があります。 –

+1

@ArnoldZokasあなたはそうではありません。クエリはまだ実行されていません。 – Ray

+0

2つのウィーベルのうち小さいものが何であるかを決めることに同意した –

1

は、あなたがそれらを保つことができることをフィルタリングすることができます。この方法でそれをリファクタリング。 これらは単純なクエリのように見え、それらをリファクタリングするとコードが読みにくくなります。

+0

クエリを変更する必要がある場合は、複数の場所でその変更を行う必要があると私は同意しません:( –

+0

私はそれが使用法とパフォーマンスの要件に依存していると言います。 –

関連する問題