Tôi đang sử dụng bây giờ khuôn khổ thực thể- nhưng đó là một vấn đề "chia sẻ" giữa tất cả ORM và thậm chí IEnumerable.Làm thế nào để lọc IEnumerable dựa trên một tham số đầu vào thực thể
Hãy nói rằng tôi có một phương pháp trong MVC trông như thế này:
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(???).ToList();
return View(data);
}
tôi muốn truy vấn bối cảnh dựa trên các thông số đầu vào như:
var data = context.Foo.Where(x => x.Date == model.Date &&
x.Name == model.Name &&
x.ItemCode = model.ItemCode).ToList();
Nhưng nó phức tạp hơn thế nữa, bởi vì nếu một trong các tham số ở trên (Date
\ Name
\ ItemCode
) là không, tôi không muốn đưa nó vào trong truy vấn.
Nếu mã cứng tôi nó có thể trông tương tự như sau:
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);
...
Phải có một cách đơn giản hơn thế này.
Tôi cần một cách để tạo biểu thức loại Expression<T, bool>
để sử dụng trong phương thức Vị trí.
[HttpPost]
public ActionResult Foo(FooModel model)
{
var context = new Context(); -- The EF session
var data = context.Foo.Where(THE_EXPRESSION).ToList();
return View(data);
}
Có cách tích hợp để xây dựng biểu thức đó không? Có một gói trong nuget mà nó?
Cập nhật: Có thể có hơn 30 properites trong mô hình thực thể; viết 30 lần Địa điểm cho mỗi truy vấn có thể là một cơn đau ở cổ:
.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();
Một ví dụ cho thấy cách sử dụng phương pháp này sẽ rất hữu ích. – devinbost