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);
}

我尝试删除OrderByandThenBy方法,但结果保持不变,(顺序无关紧要,因为它们是重复的......)。当我删除该.Where方法时,它按预期工作并显示 20 条不同的记录(尽管没有以任何方式过滤)。

我的视图是由 Visual Studio 使用 List 模板创建的。.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 关于主键的一些内容后,我决定对表结构进行一些调查。发现复合键后,我添加了第二个键的映射,一切正常。

这个问题非常令人困惑,因为 LINQ 生成的 SQL 在 SQL Management Studio 中运行时运行良好。

谢谢大家!

于 2012-11-08T21:36:28.360 回答
0

在模型变量之后点击断点,看看 LINQ 生成了什么 SQL 查询 - VS 应该为您显示它。您也可以尝试执行查询(在查询末尾添加.ToList())查看实际结果,集合中有什么以区分查询或视图是否有问题。

于 2012-11-08T19:48:13.670 回答