我有一些这样的代码尝试根据传入的一些过滤器(ContentRef和TypeRef)从Documents表中获取一些数据......
public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
{
return from document in db.Documents
where document.IsArchived == archived
&& (document.ContentRef == ContentRef)
&& (document.TypeRef == TypeRef )
select document;
}
如果ContentRef或TypeRef为null,那么我不希望它检查是否为null,我只是想忽略它。
例如,如果两者都为null,我的方法应该返回等价的
return from document in db.Documents
where document.IsArchived == archived
select document;
我该怎么做?
答案 0 :(得分:0)
试试这个:
public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
{
return from document in db.Documents
where document.IsArchived == archived
&& (ContentRef == null || document.ContentRef == ContentRef)
&& (TypeRef == null || document.TypeRef == TypeRef )
select document;
}
当ContentRef为null时,不会评估document.ContentRef == ContentRef
部分。
答案 1 :(得分:0)
使用延迟执行,您可以像这样构造查询,因为只有在调用GetEnumerator
时才会执行。
public IQueryable<Document> GetFilteredDocuments(bool archived, int? ContentRef, int? TypeRef)
{
IQueriable<Document> docs = db.Documents.Where(d => d.IsArchived == archived);
if (ContentRef != null)
docs = docs.Where(d => d.ContentRef == ContentRef);
if (TypeRef != null)
docs = docs.Where(d => d.TypeRef == TypeRef);
return docs;
}