かなり奇妙なので、これをうまく説明しようとします。
ユーザーが1つ以上の異なる値で要素を検索できる検索を開発している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 に含まれていることを確認しましたが、2 番目の繰り返しに到達すると、その値が失われ、データ全体からの完全なクエリが保存されます。
sqlAuxAnd の部分的な結果をさまざまな要素 (配列を使用) に格納しようとし、その進化を確認しました。最初の反復では sqlAuxAnd[0] に期待される結果が含まれ、sqlAuxAnd[1] は空です。
ここで何かを失っているようです...おそらくそれは些細なことですが、めまいがして見えないのだと思います。共有するアイデアはありますか?この件について気軽に説明を求めてください。英語は私の母国語ではありません。おそらく、質問が適切に編集されていないと思います。