我正在开发一个asp.net mvc 5应用程序,我正在尝试过滤列表,但是当我有多个选择时,我总会得到一个糟糕的结果。我使用带有复选框的简单表格来了解选择了哪个任务标准。
我的数据库:
Table Mission有一个标准列表(表: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”可能是一个问题,因为我只选择了一个复选框得到了正确的结果。但我现在有点迷失做多项选择标准
非常感谢您的帮助
答案 0 :(得分:0)
我会尝试:
var items = db.Missions.Where(m => m.CriteriaList
.Any(c => CriteriaSelected.Contains(c.CriteriaID )));
您应该完成每个任务,其中列表中的至少一个标准在所选标准中找到。
但请注意,由于大量的列表搜索,这并没有很好的性能和太多的记录。
答案 1 :(得分:0)
@loiti很接近,但删除了他的答案,而不是修改它。这就是你需要的:
var criteriaSelectedIds = CriteriaSelected.Select(s => s.CriteriaID);
var items = db.Missions.Where(m =>
m.CriteriaList.Any(c =>
criteriaSelectedIds.Contains(c.CriteriaID)
)
);