【发布时间】:2010-01-16 07:09:28
【问题描述】:
我正在使用带有 MVC 的 EF 3.5。
我想创建一个搜索页面,有一些字段用于日期、int 等条件。
linq to entity 中动态过滤结果的方式是什么。
如果我们可以使用一个参数 .where(a=>a.id==1)
但是与可选参数的许多组合我如何加载结果然后传递给模型。
【问题讨论】:
标签: asp.net-mvc linq entity-framework linq-to-entities
我正在使用带有 MVC 的 EF 3.5。
我想创建一个搜索页面,有一些字段用于日期、int 等条件。
linq to entity 中动态过滤结果的方式是什么。
如果我们可以使用一个参数 .where(a=>a.id==1)
但是与可选参数的许多组合我如何加载结果然后传递给模型。
【问题讨论】:
标签: asp.net-mvc linq entity-framework linq-to-entities
EF 3.5?总之……
您可以在 ObjectQuery、ObjectSet 或 IQueryable 上附加搜索条件,并根据有用的搜索条件链接它们。
public SearchMyThings( string a, string b, int c )
{
var mywidgets = ObjectContext.CreateObjectSet<Widget>();
//or the EF 1.0 version CreateSet?
if( !a.IsNullOrEmpty )
mywidgets = mywidgets.Where( w => w.AProperty == a );
if( !b.IsNullOrEmpty )
mywidgets = mywidgets.Where( w => w.BProperty == b );
if( c > 0 )
mywidgets = mywidgets.Where( c => c.CProperty == c );
}
如果您需要基于字符串的方法,您始终可以使用 ObjectQuery.Where("esql") 的重载来动态构造一些 eql 并将其传递。
如果您需要更多地控制字符串并且不怕复杂性,您可以试试Dynamic Linq。
【讨论】: