在实体框架中动态添加 where 子句
我有这个sql语句
SELECT userID from users WHERE
(name='name1' AND username='username1') OR
(name='name2' AND username='username2') OR
(name='name3' AND username='username3') OR
..........
(name='nameN' AND username='usernameN')
如何使用LINQ通过实体框架实现这个语句?
I have this sql statement
SELECT userID from users WHERE
(name='name1' AND username='username1') OR
(name='name2' AND username='username2') OR
(name='name3' AND username='username3') OR
..........
(name='nameN' AND username='usernameN')
How can I implement this statement with entity framework using LINQ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
您可以使用一个名为 PredicateBuilder 的漂亮东西。像这样使用它
You can use a beautiful thing called PredicateBuilder. Use it like this
这个助手可能会帮助你。
和:
This helper may help you.
and:
注意:这是根据我现有的内容进行修改的,因此它可能无法开箱即用。但这将是一个很好的起点。
生成选择器:
WHereSpecifier:
用法:
NOTE: this is modified from something I have so it might not work out of the box. But it would be a good starting point.
GenerateSelector:
WHereSpecifier:
Usage:
我尝试了 @Egor Pavlikhin 解决方案,但我得到
“LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”。”
。根据这个 您可以使用 谓词扩展:
I tried @Egor Pavlikhin solution but i got
"The LINQ expression node type 'Invoke' is not supported in LINQ to Entities."
.According to this you can use PredicateExtensions :
不要忘记实体框架也理解实体sql,所以你可以在字符串中执行这部分查询。当您需要做动态的事情时,构建字符串非常方便。
Don't forget that entity framework also understands entity sql, so you can do this part of the query in a string. Building a string up is pretty convenient when you have dynamic stuff you need to do.
我必须根据用户界面选择动态构建“Where”子句的谓词。 'System.Dynamic.Linq' 允许使用字符串进行谓词。
“System.Dynamic.Linq”可作为 nuget 包使用。查看 Scott Guthrie 对该主题的介绍
I had to construct the predicate for the 'Where' clause dynamically based on User Interface selections. 'System.Dynamic.Linq' allows to predicates from strings.
'System.Dynamic.Linq' is available as a nuget package. Check out Scott Guthrie's introduction to the topic here.
我发现这种方法太简单了:
i found this way it is too simple :
对于 System.Dynamic.Linq
这是动态 sql:
For
System.Dynamic.Linq
This is dynamic sql: