c#-4.0 - 性能问题 : How to execute Two lambda expression at once?。使用了 "Contains"和 "Any"运算符

标签 c#-4.0 lambda asp.net-mvc-4 entity-framework-5

示例代码

var Ids = _db.Projects.Where(Project=>Project.Title!="test23rdoct")
    .Select (pro => pro.Id);

Expression<Func<Company, bool>> masterExpression = 
    Company => Company.Participants.Any(part => ids.Contains(part.Project.Id));

IQueryable<Object> queryEntity = _db.Companies.Where(masterExpression)

上述查询执行两次。在服务器中存储 id(有时 id 超过 50k 计数)。它会导致性能问题。有人可以建议如何组合这两个查询并立即执行吗?

最佳答案

怎么样:

var queryEntity = _db.Companies.Where(c => c.Partipants.Any(p => p.Project.Title != "test23rdoct"));

编辑 :
对于复杂的查询,您还可以拆分:
Func<Project, bool> projectFilter = Project => ((Compare(Convert(Project.Title), "a") > 0) AndAlso ((Convert(Project.Title) != "test23rdoct") AndAlso
(Project.Participants.Any(Participant => (Compare(Convert(Participant.ParticipantRole.Name), "Finance") > 0)) AndAlso 
(Project.Participants.Any(Participant => (Convert(Participant.Person.FirstName) != "test1")) AndAlso 
Project.Participants.Any(Participant => (Compare(Convert(Participant.Company.Name), "test") > 0))))));

然后做:
var queryEntity = _db.Companies.Where(c => c.Partipants.Any(p => projectFilter(p.Project));

关于c#-4.0 - 性能问题 : How to execute Two lambda expression at once?。使用了 "Contains"和 "Any"运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13761092/

相关文章:

linq-to-sql - linq to sql 查询的迭代非常慢

html - 在 Asp.net 中从代码隐藏添加 HTML

javascript - 为 MVC 中的不同 View 加载单独的 javascript

c++ - lambda 函数中的临时捕获变量 - C++11

python - 使用匿名lambda实现阶乘函数的python代码的解释是什么

c# - asp.net mvc Response.Redirect 在 global.asax 中不起作用

asp.net-mvc - MVC 4 绑定(bind)列表结果的嵌套列表

.net - 如何填充 ObjectSet (EntityFramework)?

c# - WPF 启动画面窗口

c++ - 为什么我不能将 [](auto&&...){} 转换为 std::function<void()>?