0

かなり奇妙なので、これをうまく説明しようとします。

ユーザーが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] は空です。

ここで何かを失っているようです...おそらくそれは些細なことですが、めまいがして見えないのだと思います。共有するアイデアはありますか?この件について気軽に説明を求めてください。英語は私の母国語ではありません。おそらく、質問が適切に編集されていないと思います。

4

1 に答える 1

1

groupforeachから変数をキャプチャする必要があります。

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 に答える