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)
)
);
我正在开发一个 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)
)
);