我有一个看起来像this的数据库,我需要一个返回排序到列表中的所有类别的查询,并且还应该返回与companyID匹配的任何类别。
这是原始查询
var ROEBCategories = (from c in db.Content_Category select c).OrderBy(x => x.CategoryId).AsParallel().ToList();
这是我尝试过的查询
var roebCategories = (from c in db.Content_Category
where c.CompanyId == rawData.CompanyId || (!(from c2 in db.Content_Category select c2.CategoryId).Contains(c.CategoryId) && (!c.CompanyId.HasValue))
select c).OrderBy(x => x.CategoryId).AsParallel().ToList();
目前,orignal查询返回全部15,新的返回0.当categoryID不是15时,我希望新的返回14,但我希望它在15时返回最后一个类别。 / p>
答案 0 :(得分:1)
您的查询应该如下所示:
var roebCategories = db.Content_Category
.Where(c => c.CompanyId == null || c.CompanyId == rawData.CompanyId)
.OrderBy(x => x.CategoryId)
.ToList();
Where
的第一部分匹配所有没有CompanyId
的类别,第二部分匹配具有给定公司ID的所有类别。
因此当rawData.CompanyId
为15
时,您将获得所有15行。如果它是null
,则只会获得CompanyId
为空的14行。