lambda和linq表达

时间:2015-01-30 18:00:24

标签: c# linq lambda

我正在开发一个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”可能是一个问题,因为我只选择了一个复选框得到了正确的结果。但我现在有点迷失做多项选择标准

非常感谢您的帮助

2 个答案:

答案 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)
    )
);