我什至不知道如何言语我想要什么,所以这里有一些代码!
//jobTerm
if (!String.IsNullOrEmpty(vm.SelectedJobTerm))
{
vacancies = vacancies.Where(x => (!x.IsExternalPost
&& x.JobTerm.Name.Contains(vm.SelectedJobTerm)));
}
//jobType
if (!String.IsNullOrEmpty(vm.SelectedJobType))
{
vacancies = vacancies.Where(x => (!x.IsExternalPost
&& x.JobType.Name.Contains(vm.SelectedJobType)));
}
上面发生的事情是,我正在浏览一系列IF语句,如果某些事情适用,则将其添加到LINQ查询中。我将执行力推迟到结束。如果有帮助,这是用于搜索结果过滤器的。
在上面的代码中,您会发现我要放入我希望查询的Where子句中不关心VM.SelectedJobterm或vm.SelectedJobtype,如果空缺是外部帖子。我需要几乎适用于我所有的过滤器。逻辑应该像这样的事情
-Is there a value in vm.SomeValue?
|_____>Yes
| |_____>Is this an external post?
| |__>Yes->do not apply where clause
| |
| |__>No->Apply the where clause stuff
|
|____>No-> Go about your business.
有没有办法在linq?
中执行此操作我应该注意,我正在击中Azure数据库,因此我无法通过Profiler运行它。有点盲人。
您当前排除了 IsExternalPost == true
的记录。
这将包括它们:
vacancies = vacancies.Where(x =>
x.IsExternalPost || x.JobTerm.Name.Contains(vm.SelectedJobTerm));
使用PredicateBuilder
?
var predicate = PredicateBuilder.True<MyClass>();
//jobTerm
if (!String.IsNullOrEmpty(vm.SelectedJobTerm))
predicate = predicate.And(x => x.JobType.Name.Contains(vm.SelectedJobType));
//jobType
if (!String.IsNullOrEmpty(vm.SelectedJobType))
predicate = predicate.And(x => x.JobType.Name.Contains(vm.SelectedJobType));
predicate = predicate.Or(x => x.IsExternalPost);
vacancies = vacancies.Where(predicate);
赠款的帖子是正确的,但是由于使用||
运算符执行懒惰加载的方式,因此可以简化(如果第一部分是正确的,它甚至都不会检查或关心第二部分):
vacancies = vacancies.Where(x => x.IsExternalPost
|| x.JobTerm.Name.Contains(vm.SelectedJobTerm));
,或者如果您想在同一查询中检查两个条件:
vacancies = vacancies.Where(x => x.IsExternalPost
|| x.JobTerm.Name.Contains(vm.SelectedJobTerm)
|| x.JobType.Name.Contains(vm.SelectedJobType));