所以,我想实现一个在数据库中搜索记录的页面。该动作的URL应该是“〜/ Mail / List / {PropertyName} / {PropertyValue}。
属性名称和值是要过滤的相应实体属性名称,值是要匹配的属性值。问题是该实体包含许多类型的属性。 Int,string,date ..等等。
问题是,如何实施动态搜索页面或类似的东西来过滤我的查询?
谢谢!
答案 0 :(得分:3)
所有LINQ运算符都希望传入lambda。因此,当您想要像Where(x => x.[PropertyName] == [PropertyValue])
那样进行过滤时,您需要能够构造相应的lambda表达式。通常,当在编译时知道值时,没有问题,你只需要构造lambda。
如果在编译时不知道值,则必须手动构造expression tree(基本上是lambda表达式)。这可能有点复杂,但有一些库可以帮助您,例如Dynamic LINQ
(here是EF的另一个好教程)。然后,您可以将 Where 条件指定为字符串,库在运行时将其转换为表达式树,如果错误则抛出异常
因此,在您的示例中,使用动态LINQ,您可以执行db.Mails.Where(PropertyName + " == @0", PropertyValue);