1

少しリファクタリングを検討しています...NHibernateを使用して、現在このクエリがあります

 public Widget FindByCode(string code)
 {
  return 
             _session
                 .Query<Widget>()
                 .Where(w => !w.IsDeleted)
                 .FirstOrDefault(w => w.Code == code);
  }

これ使おうと思ってた

public Widget FindByCode(string code)
 {
  return 
             _session
                 .Query<Widget>()
                 .Where(w => !w.IsDeleted && w.Code == code)
                 .FirstOrDefault();
  }

どちらか一方が他方よりも優れていますか? ヒント、リンク、またはコードは常に高く評価されます。乾杯!

4

3 に答える 3

3

linq2objectsまたはlinq2sqlでは、次のようにFirstOrDefaultだけを記述できます。

public Widget FindByCode(string code)
 {
  return 
             _session
                 .Query<Widget>()
                 .FirstOrDefault(w => !w.IsDeleted && w.Code == code);
  }

NHibernateについてはよくわかりませんが、おそらく機能します。また、生成されたSQLは、NHProfまたは通常のSQLプロファイラーでいつでも確認できます。

于 2012-06-12T15:12:34.340 に答える
3

述語を 2 つのチャンクに分割するのは、私には混乱を招くように思えます。「フィルタリング」コードを1か所に保持し、すべてを.Where(2番目の例)またはすべて.FirstOrDefault. 後者のオプションはより簡潔で、使用する演算子が少ないため、一般的に理想的です。

于 2012-06-12T15:04:53.890 に答える
0

2つ目は、両方の基準に基づいて1つの予測のみを実行するため、より優れています。最初のものは、最初の基準に基づいて最初の投影を行い、次に2番目の基準に基づいて2番目の投影を適用します。2番目のアプローチを使用することをお勧めします。

于 2012-06-12T15:07:22.047 に答える