我正在尝试创建一个部分视图来显示一些数据。我的控制器接收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条不同的记录(但不会以任何方式过滤)。
我的视图是由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;
答案 0 :(得分:2)
获胜者鸡肉晚餐!
原来问题在于模型到表的映射。我正在处理的表有一个复合键,我不知道...在阅读mipe34关于主键的一点后,我决定对表结构进行一些调查。在发现复合键之后,我添加了第二个键的映射,并且一切正常。
这个问题非常令人困惑,因为LINQ生成的SQL在SQL Management Studio中运行时运行得非常好。
全部谢谢!
答案 1 :(得分:0)
在模型变量之后点击断点并查看LINQ生成的SQL查询 - VS应该为您显示它。您还可以尝试执行查询(在查询末尾添加.ToList())以查看实际结果,集合中的内容用于区分查询或视图中是否存在问题。