我正在使用现在的实体框架 - 但它是所有ORM甚至IEnumerable之间"共享"的问题.
假设我在MVC中有一个方法如下:
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(???).ToList();
return View(data);
}
Run Code Online (Sandbox Code Playgroud)
我想根据输入参数查询上下文,如:
var data = context.Foo.Where(x => x.Date == model.Date &&
x.Name == model.Name &&
x.ItemCode = model.ItemCode).ToList();
Run Code Online (Sandbox Code Playgroud)
但它比这更复杂,因为如果上面的一个参数(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);
...
Run Code Online (Sandbox Code Playgroud)
必须有一种比这更简单的方法.
我需要一种方法来生成Expression<T, bool> …