我有一个主VendorProfile表和一个包含状态代码和日期戳的1-VendorHistory表。以下查询仅用于检索每个供应商的最新状态(状态代码和日期)。但是,该视图允许用户选择任何状态代码的复选框来过滤视图。所以我需要添加一个与任何复选框StatusSelections匹配的where子句。
public IEnumerable<BrowseStatusModel> BrowseByStatus(int[] StatusSelections)
{
IQueryable<BrowseStatusModel> query = _db.VendorProfiles
.Include("VendorStatusHistory")
.Include("StatusCodes")
.Select(s => new BrowseStatusModel
{
ProfileID = s.ProfileID,
Name = s.Name,
CompanyName = s.CompanyName,
CompanyDBA = s.CompanyDBA,
DateCreated = s.DateCreated,
Status = s.VendorStatusHistories.OrderByDescending(o => o.DateCreated).FirstOrDefault().Id,
StatusDate = s.VendorStatusHistories.OrderByDescending(o => o.DateCreated).FirstOrDefault().DateCreated
})
.OrderBy(x => x.ProfileID);
foreach (int status in StatusSelections)
{
query = query.Where(x => x.Status == status);
}
return query;
}
上面的foreach循环有效但不幸的是创建了AND条件,其中所有选择必须为true而不是ANY。我想我必须以某种方式使用带有以下内容的where子句,但是在正确的语法上却没有成功。
.AsQueryable().Any();
答案 0 :(得分:2)
在foreach循环的位置使用contains
query = query.Where(x => StatusSelections.Contains(x.Status))