我应该继续向LINQ查询添加条件,还是提前添加一个条件并使用两个不同的查询
本文关键字:条件 添加 查询 两个 一个 LINQ 我应该 继续 | 更新日期: 2023-09-27 18:19:32
我有以下LINQ查询:
var contents = _contentsRepository.GetAll()
.Where(a => a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId &&
a.ContentStatusId == contentStatusId )
.ToList();
我希望此选择正常进行,除非contentStatusId==99。如果是在这种情况下,我希望它从数据库中检索具有ANY contentStatusId的行。
最好先检查contentStatusId,然后将其分解为两个LINQ选择,或者有没有办法修改我的LINQ查询?
请注意,我使用的是SQL Server 2012和我的存储库:
公共虚拟IQueryable GetAll(){return DbSet;}
我相信您可以通过在谓词中添加contentStatusId == 99
组件来修改查询,该组件将缩短a.ContentStatusId == contentStatusId
的求值时间,如下所示:
var contents = _contentsRepository.GetAll()
.Where(a => a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId &&
(contentStatusId == 99 ||
a.ContentStatusId == contentStatusId))
.ToList();
在正常情况下,一切都会像以前一样工作。
在contentStatusId
等于99的情况下,每行都会有计算contentStatusId == 99
的开销,尽管我认为根据您查询的存储库的不同,这部分可能会被内联为true
。您应该亲眼看到这对设置性能的影响。
试试这个
var contents = _contentsRepository.GetAll()
.Where(a => contentStatusId == 99 ? (a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId &&
a.ContentStatusId == contentStatusId) : (a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId) )
.ToList();
var contents = _contentsRepository.GetAll()
.Where(a =>
{
return a.ContentTypeId == 99 ||
(a.SubjectId == subjectId &&
a.ContentTypeId == contentTypeId &&
a.ContentStatusId == contentStatusId)
}