LINQ to EF在Where子句中使用集合

时间:2013-04-17 19:31:51

标签: asp.net-mvc-4 linq-to-entities entity-framework-5

我有一个主VendorProfile表和一个包含状态代码和日期戳的1-VendorHistory表。以下查询仅用于检索每个供应商的最新状态(状态代码和日期)。但是,该视图允许用户选择任何状态代码的复选框来过滤视图。所以我需要添加一个与任何复选框StatusSelections匹配的where子句。

Model Diagram

    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();

1 个答案:

答案 0 :(得分:2)

在foreach循环的位置使用contains

query = query.Where(x => StatusSelections.Contains(x.Status))