Linq查询麻烦

时间:2018-05-17 09:10:10

标签: c# linq

我有一个看起来像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>

1 个答案:

答案 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.CompanyId15时,您将获得所有15行。如果它是null,则只会获得CompanyId为空的14行。