asp.net mvc - 循环使用IQueryable元素不记得以前的结果



我会试着很好地解释这一点,因为它很奇怪。

我有一个带有 Linq2SQL 的 .NET MVC 4 应用程序,我正在开发一个搜索,用户可以在其中通过一个或多个不同的值查找元素。

我有一个接收字符串的方法:"value1&value2|value3&value4"

我假装返回结果,其中确定的元素包含值 1 和值 2 或确定的元素包含值 3 和值 4。

我正在使用这样的算法:

if (!String.IsNullOrEmpty(figuresSelected)) {
    string[] groupsOR = figuresSelected.Split('|');
    IQueryable<CENTROSOPERACIONES> sqlAuxOr = null;
    foreach (string goupOR in groupsOR) {
        string[] groupsAND = groupOR.Split('&');
        IQueryable<CENTROSOPERACIONES>[] sqlAuxAnd = sql; //sql contains current query so far
        foreach (string group in groupsAND) {
            sqlAuxAnd = sqlAuxAnd.Where(o => o.CENTROS.FIGURASCENTROS.Any(f => f.FIGURAS.nombre == group));
        }
        if (sqlAuxAnd != null)
            if (sqlAuxOr == null)
                sqlAuxOr = sqlAuxAnd;
            else
                sqlAuxOr = sqlAuxOr.Union(sqlAuxAnd);
    }
}

好吧,这里的问题是,在内部循环内的每次迭代中,sqlAuxAnd 查询来自 sql 上的原始数据容器,而不是来自在前一个循环中获得的子结果。我已经逐次跟踪循环迭代,并检查了 sqlAuxAnd 是否包含第一次迭代的预期子结果,但是当到达第二次迭代时,该值会丢失,并且来自整个数据的完整查询存储在其中。

试图将sqlAux和部分结果存储在不同的元素上(我使用了一个数组)并检查了它的演变。在第一次迭代中,sqlAuxAnd[0] 包含预期结果,sqlAuxAnd[1] 为空,在第二次迭代中,两个元素 sqlAuxAnd[0] 和 sqlAuxAnd[1] 都包含从整个数据集中查询第二个值的预期结果。

看来我在这里失去了一些东西...可能是微不足道的事情,但我怀疑我太头晕了,看不到它。有人有什么想法要分享吗?请随时就此事寻求解释,英语不是我的母语,我认为这个问题可能没有像应有的那样编辑。

你需要从foreach中捕获group变量:

foreach (string group in groupsAND) {
    var captured = group;
    sqlAuxAnd = sqlAuxAnd.Where(o => o.CENTROS.FIGURASCENTROS.Any(f => f.FIGURAS.nombre == captured));
}

请参阅内置 foreach 循环的 Linq 查询始终从上次迭代中获取参数值。

最新更新