私は今Entityフレームワークを使用していますが、すべてのORMとIEnumerable間で「共有」の問題です。エンティティ入力パラメータに基づいてIEnumerableをフィルタリングする方法
のは、私はMVCのメソッドを持っているとしましょうが、次のようになります。
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(???).ToList();
return View(data);
}
私は次のように入力パラメータに基づいてコンテキストを照会する:
var data = context.Foo.Where(x => x.Date == model.Date &&
x.Name == model.Name &&
x.ItemCode = model.ItemCode).ToList();
しかし、それはそれよりも複雑ですが、上記のパラメータ(Date
\ Name
\ ItemCode
)のいずれかがnullの場合、クエリ内には含めたくないためです。
ことができます私はハードコードする場合は、次のようになります。
var query = context.Foo;
if (model.Date != null)
query =query.Where(x => x.Date == model.Date);
if (model.ItemCode != null)
query =query.Where(x => x.ItemCode == model.ItemCode);
...
これより簡単な方法があるに違いありません。
Whereメソッドで使用するタイプExpression<T, bool>
の式を生成する方法が必要です。
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(THE_EXPRESSION).ToList();
return View(data);
}
この式をビルドする方法はありますか?それをするナゲットのパッケージはありますか?
更新:モデル・エンティティに30以上のproperitesがあるかもしれません。 30回書く各クエリの場所は首に痛みがあります。
.Where(model.Date != null, x => x.Date == model.Date)
.Where(model.Name != null, x => x.Name == model.Name)
.Where(model.ItemCode != null, x => x.ItemCode == model.ItemCode)
...
...
...
.ToList();
このメソッドの使い方を示す例は非常に役に立ちます。 – devinbost