我只是想确保我理解正确...
search
是一个包含查询字符串的对象。
Repo.Query
会返回ObjectQuery<T>
。
根据我的理解,链接的linq语句将在实体框架返回满足查询的所有行之后过滤结果。所以所有的行都被返回,然后在内存中进行过滤。所以我们返回了一堆我们并不想要的数据。返回大约有10k行,所以这很重要。就像让我的困惑得到澄清。
var searchQuery = Repo.Query(search)
.Where(entity =>
entity.Prop1.ToUpper().Equals(prop1.ToUpper()) &&
entity.Prop2.ToUpper().Equals(prop2.ToUpper()))
.OrderBy(entity => Repo.SortExpression ?? entity.prop1);
答案 0 :(得分:1)
您的Repo.Query(string query)
函数应返回IQueryable<T>
。
然后您可以在不先获取所有行的情况下进行过滤和排序。
希望这会有所帮助
答案 1 :(得分:1)
如果是SQL,这很可能会在服务器上而不是在内存中创建SQL查询和过滤器。
事实上,上述陈述实际上并没有做任何事情。 只有当你迭代它时才会执行查询。这就是为什么某些提供程序(如EF to SQL one)可以将表达式树折叠为SQL查询。
最简单的检查方法是使用LINQPAD或SQL Profiler查看实际执行的查询。