微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

c# – 使用具有实体框架的LINQ语句以编程方式构建查询

假设我有一个类似的查询

r = r.Where(x => iEnumerableMachineNames.Contains(x.Machine.Name) 
                 || x.Server==true);

例如,有没有办法在语句之外构建谓词(我认为它就是所谓的)

t = (x => iEnumerableMachineNames.Contains(x.Machine.Name));
s = (x => x.Server==true)
q = t.Or(s);
r = r.Where(x => q);

基本上我想基于输入参数以编程方式构建我的查询,用于EF 5.

解决方法

您可以动态构建表达式,但不像伪代码那样简单 – 它需要反射和表达式树( read this).

一个简单的方法来完成你想要做的事情是使用布尔标志来短路谓词的不同部分:

bool testMachineName;
bool testIsServer;

r = r.Where( x =>
    ( !testMachineName || iEnumerableMachineNames.Contains( x.Machine.Name ) ) ||
    ( !testIsServer || x.Server ) );

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐