我会尽量解释清楚,因为这很奇怪。
我有一个带有 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] 包含从整个数据集中查询第二个值的预期结果。
看来我在这里失去了一些东西......可能这是微不足道的,但我想我太头晕了,看不到它。有人有什么想法可以分享吗?随时要求对此事进行解释,英语不是我的母语,我想这个问题可能没有得到应有的编辑。