質問

でlinq to sqlによって全然違いますようになります:

var q = db.Colors;
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

にDb4O linqあったら教えてくださいこうから開始

var q = (from Color c in db
         select c);
if(! string.IsNullOrEmpty(colorName))
   q = q.Where(c=>c.Name.Equals(colorName));
return q.ToList();

この結果

  1. 完全に列挙すべての色
  2. フィルターによります。

その解決にはならないたのを目指してオフコースです。ご意見募集

役に立ちましたか?

解決

このようなものが適しているでしょうか?

return (from Color c in db
       where !String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName)
       select c).ToList();

これで、また、複数のパラメータを使用することができます:

return (from Color c in db
       where (!String.IsNullOrEmpty(colorName) && c.Name.Equals(colorName))
          || (!String.IsNullOrEmpty(color1Name) && c.Name.Equals(color1Name))
          || (!String.IsNullOrEmpty(color2Name) && c.Name.Equals(color2Name))
          ...
       select c).ToList();

他のヒント

私はあなたがで取得しているかわからないんだけど。あなたは値が返さ最適化するように、第1の場合には、コードの一部は、サーバー側を実行することを心配しています。使用される値には何の最適化はありませんので、しかし、後者の場合には列挙が局部的に行われていますか?

その場合は、オブジェクトへのLINQでこれを回避するための方法はありません。フィルター操作を行うためにそれらを列挙回避するための方法はありませんので、オブジェクトがメモリ内にあります。

あなたが表現を分割する場合:

IDb4oLinqQuery<Color> q;
if(! string.IsNullOrEmpty(colorName))
{
  q = from Color c in db
      where c.Name.Equals(colorName)
      select c;
}
else
{
  q = from Color c in db
      select c;
}
return q.ToList();

この方法では、db4oのプリプロセッサは、2つの異なるLINQクエリを見ていますか?欠点は、もちろん、このソリューションは、はるかに冗長で正確に乾燥していないオフになっている..

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top