lambda 和 linq 表达式

lambda and linq expression

我正在开发一个 asp.net mvc 5 应用程序,我正在尝试过滤一个列表,但是当我有多项选择时,我总是会得到不好的结果。我使用带有复选框的简单表单来了解选择了哪个任务的条件。

我的数据库:

Table任务有一个标准列表(Table:CriteriaList)

// public virtual ICollection<Criteria> CriteriaList { get; set; }

int[] CriteriaSelected = List of criteria selected in the form

var items = from i in db.Missions select i;

foreach (var criteriaID in CriteriaSelected)
{
  items = items.Where(m => m.CriteriaList.Any(c => c.CriteriaID == criteriaID ));
}

我知道这可能是用于连接多个 "where" 的 'and' 运算符的问题,因为我只为选中的一个复选框得到了正确的结果。但是我现在有点迷失了做多项选择的标准

非常感谢您的帮助

我会尝试:

var items = db.Missions.Where(m => m.CriteriaList
                                    .Any(c => CriteriaSelected.Contains(c.CriteriaID )));

您应该获得每个任务,其中列表中的至少一个条件在所选条件中找到。

但请注意,由于列表搜索过多,记录过多时性能不佳。

@loiti 很接近,但删除了他的答案而不是修改它。这是您需要的:

var criteriaSelectedIds = CriteriaSelected.Select(s => s.CriteriaID);
var items = db.Missions.Where(m =>
    m.CriteriaList.Any(c =>
        criteriaSelectedIds.Contains(c.CriteriaID)
    )
);