使用.where扩展方法会导致重复(MVC-LINQ)

时间:2012-11-08 18:58:55

标签: asp.net-mvc linq

我正在尝试创建一个部分视图来显示一些数据。我的控制器接收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);
}

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

我的视图是由Visual Studio使用List模板创建的。通过从LINQ语句中删除.Where方法,已证明该视图有效。以下是该观点的重要部分:

@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;

2 个答案:

答案 0 :(得分:2)

获胜者鸡肉晚餐!

原来问题在于模型到表的映射。我正在处理的表有一个复合键,我不知道...在阅读mipe34关于主键的一点后,我决定对表结构进行一些调查。在发现复合键之后,我添加了第二个键的映射,并且一切正常。

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

全部谢谢!

答案 1 :(得分:0)

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