我一直觉得,如果我写下面的代码:
filteredClients = _clientAPIRepository.AllIncluding(s => s.Jobs, s => s.Suburb);
它将执行将内容传递到filteredclients的语句,此时我希望使用where子句对许多列进行筛选。
我最初的理解是,它将整个表转移到内存中,而不是在DB服务器上完成所有工作。我对这里的效率感兴趣,希望在数据库上执行一次查询,而不必返回,因为我添加了一个WHERE子句等,所以我尝试创建一个大型的一次性语句来尝试满足这个意图,但是……
然后我遇到了
this answer from Jon Skeet
指示在开始使用结果之前不会立即执行EF查询。
我不知道查询的形状是什么。用户可以对一列或多列进行筛选,也可以对一列或多列进行排序。
如前所述,我尝试使用单个查询进行筛选,同时考虑到下面不需要某些where子句这一事实。
filteredClients = _clientAPIRepository.AllIncluding(s => s.Jobs, s => s.Suburb)
.Where(c => c.ClientNo.ToString().StartsWith(clientFilters.ClientNo) || clientFilters.ClientNo == string.Empty)
.Where(c => c.CompanyName.StartsWith(clientFilters.ClientLastName) || clientFilters.CompanyName == string.Empty)
.Where(c => c.MobilePhone.StartsWith(clientFilters.MobilePhone) || clientFilters.MobilePhone == string.Empty);
…我还需要添加排序功能。
如果我从这个查询(带谓词)开始:
filteredclients=_clientapiprepository.allincluding(s=>s.jobs,s=>s.urbane);
然后,在方法的后面,我添加了一个
where
条款如下:
filteredClients.where.Where(c => c.ClientNo.ToString().StartsWith(clientFilters.ClientNo));
…等等,在构建查询的基础上-根据选择了什么过滤器和orderby,我可以在我的方法中这样做。
我想知道是否可以逐步构建查询,添加
哪里
条款和订单仅基于从网页发送的内容。并且,在执行查询时..如果执行一次或多次?