0

我会尽量解释清楚,因为这很奇怪。

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

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

我假装返回一个确定元素包含 value1 AND value2 或该确定元素包含 value3 AND value4 的结果。

我正在使用这样的算法:

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 在第一次迭代中是否包含预期的子结果,但是当到达第二个迭代时,该值丢失并且来自整个数据的完整查询存储在其上。

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

看来我在这里失去了一些东西......可能这是微不足道的,但我想我太头晕了,看不到它。有人有什么想法可以分享吗?随时要求对此事进行解释,英语不是我的母语,我想这个问题可能没有得到应有的编辑。

4

1 回答 1

1

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

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

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

于 2013-02-01T11:52:05.027 回答