使用MVC + Linq + EF搜索页面

时间:2011-03-26 06:06:46

标签: asp.net asp.net-mvc linq entity-framework

所以,我想实现一个在数据库中搜索记录的页面。该动作的URL应该是“〜/ Mail / List / {PropertyName} / {PropertyValue}。

属性名称和值是要过滤的相应实体属性名称,值是要匹配的属性值。问题是该实体包含许多类型的属性。 Int,string,date ..等等。

问题是,如何实施动态搜索页面或类似的东西来过滤我的查询?

谢谢!

1 个答案:

答案 0 :(得分:3)

所有LINQ运算符都希望传入lambda。因此,当您想要像Where(x => x.[PropertyName] == [PropertyValue])那样进行过滤时,您需要能够构造相应的lambda表达式。通常,当在编译时知道值时,没有问题,你只需要构造lambda。

如果在编译时不知道值,则必须手动构造expression tree(基本上是lambda表达式)。这可能有点复杂,但有一些库可以帮助您,例如Dynamic LINQhere是EF的另一个好教程)。然后,您可以将 Where 条件指定为字符串,库在运行时将其转换为表达式树,如果错误则抛出异常

因此,在您的示例中,使用动态LINQ,您可以执行db.Mails.Where(PropertyName + " == @0", PropertyValue);

之类的查询