使用MVC + Linq + EF实现搜索页面

5
所以,我想实现一个搜索数据库记录的页面。动作的URL应该类似于“~/Mail/List/{PropertyName}/{PropertyValue}”。
属性名称和值是相应的实体属性名称进行筛选,并且值是要匹配的属性值。问题在于实体包含许多类型的属性。整数、字符串、日期等。
我的问题是,如何实现动态搜索页面或类似过滤查询的内容?
谢谢!
1个回答

3
所有的LINQ操作都需要传递lambda表达式。因此,当您想要执行像Where(x => x.[PropertyName] == [PropertyValue])这样的过滤操作时,您需要能够构建相应的lambda表达式。通常情况下,当值在编译时已知时,没有问题,您只需构建lambda表达式即可。
当您在编译时不知道值时,您必须手动构建表达式树(本质上就是lambda表达式的组成部分)。这可能有点复杂,但是有一些库可以帮助您,比如Dynamic LINQ这里还有一个使用EF的好教程)。然后,您可以将您的Where条件作为字符串指定,库在运行时将其转换为表达式树或者如果它错误则抛出异常。
所以,在您的示例中,使用动态LINQ,您可以像这样查询 db.Mails.Where(PropertyName + " == @0", PropertyValue);

哦。我的。天!伙计,谢谢!这是完美的答案。事实上,我一直在为这个问题苦苦挣扎很长时间了,终于有人给了我一个直截了当的答案! - Luis Aguilar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接