3

一部のデータを表示するために部分ビューを作成しようとしています。私のコントローラーは を受け取り、string itemIDそれに基づいてクエリを実行します。部分ビューが呼び出されると、同じレコードが何度も表示されます。

注: セキュリティ上の理由から、オブジェクトの名前を変更しました。

[ChildActionOnly]
public ActionResult someAction(string itemID = "")
{
    //Empty itemID
    if(string.IsNullOrEmpty(itemID))
    {
        return RedirectToAction("Index", "Search");
    }

    var model = _db.someTable
            .Where(r => r.itemID == itemID)
            .OrderBy(r => r.col1)
            .ThenBy(r => r.col2)
            .Take(20);
    return PartialView("_myView", model);
}

OrderByメソッドとメソッドを削除しようとしましたThenByが、結果は同じままです(重複しているため、順序は関係ありません...)。メソッドを削除すると.Where、期待どおりに機能し、20 の異なるレコードが表示されます (ただし、決してフィルタリングされません)。

私のビューは、List テンプレートを使用して Visual Studio によって作成されました。.Whereこのビューは、LINQ ステートメントからメソッドを削除することで機能することが証明されています。ビューの重要な部分は次のとおりです。

@model IEnumerable<MyApp.Models.OperationData>
.
.
.
@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.some column)
    </td>
.
.
.

このクエリの何が問題なのかについてのアイデアはありますか?

編集:他のLINQ構文を試してみましたが、同じ結果になりました:

var model = from r in _db.someTable where r.itemID == itemID select r;
4

2 に答える 2

2

勝者勝者チキンディナー!

問題は、モデルからテーブルへのマッピングにあったことが判明しました。私が取り組んでいたテーブルには、私が知らなかった複合キーがあります... 主キーに関する mipe34 のビットを読んだ後、テーブル構造を調査することにしました。複合キーを発見した後、2 番目のキーのマッピングを追加したところ、すべてうまくいきました。

この問題は、LINQ によって生成された SQL が SQL Management Studio で実行されたときに完全に正常に機能したため、非常に紛らわしいものでした。

皆さんありがとう!

于 2012-11-08T21:36:28.360 に答える
0

モデル変数の直後にブレークポイントをヒットし、LINQ によって生成された SQL クエリを確認します - VS はそれを表示するはずです。クエリを実行して (クエリの最後に .ToList() を追加)、実際の結果を確認して、クエリまたはビューに問題があるかどうかを区別することもできます。

于 2012-11-08T19:48:13.670 に答える