编辑:这个问题现在已经解决了
我目前正在尝试使用LINQ从各种表中简单选择多个列,我很新。基本上我是使用内部联接组合来自多个表的结果,以便将一些信息提供给我的模型,然后将其传递给视图。查询只返回第一个结果(这是一个正确的结果)并返回比它出现的次数更多的次数,而从不显示任何其他结果。也就是说,它会多次重复第一个结果,而不会显示任何其他结果。
所以如果输出应该说(这只是一个例子)
Name Task Name Status
Derp Do the Dishes ACTIVE
John Example Task COMPLETE
Jesus Walk on Water IMPOSSIBLE
它会改为
Name Task Name Status
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
Derp Do the Dishes ACTIVE
我认为我的LINQ语法有问题。
以下是我的控制器的相关部分:
var TaskInstanceList = taskInstanceService.SelectAll();
var Person = personService.SelectAll();
var Task = taskService.SelectAll();
var Status = statusService.SelectAll();
var NewModel = new TaskLogModelContainer();
NewModel.Tasks = new List<TaskLogModel>();
var results = from ti in TaskInstanceList
join p in Person on ti.personID equals p.personID
join t in Task on ti.taskID equals t.taskID
join s in Status on ti.task_statusID equals s.statusID
select new { Person = p, Task = t, Status = s, Instance = ti };
foreach (var result in results)
{
var obj = new TaskLogModel();
obj.ID = result.Instance.person_taskID;
obj.FirstName = result.Person.FirstName;
obj.LastName = result.Person.LastName;
obj.Description = result.Task.Description;
obj.TaskName = result.Task.Name;
obj.Value = result.Task.Value;
obj.Status = result.Status.Status;
obj.Notes = result.Status.Notes;
NewModel.Tasks.Add(obj);
}
return View(NewModel);
这是我的观点
@model MyProj.Models.TaskLogModelContainer
@{
ViewBag.Title = "index";
}
<h2>@ViewBag.Title</h2>
<table>
<tr>
<th>
Name
</th>
<th>
Task Name
</th>
<th>
Status
</th>
</tr>
@foreach (var item in Model.Tasks)
{
<tr>
<td>@item.FirstName @item.LastName</td>
<td>@item.TaskName</td>
<td>@item.Status</td>
</tr>
}
</table>
答案 0 :(得分:0)
请澄清,如果您的Linq语句返回的结果太多,或者输出中的数据量与查询不对应。
如果您的Linq语句返回的结果太多,您可以将查询减少到单个联接。 所以从:
开始 var results = from ti in TaskInstanceList
join p in Person on ti.personID equals p.personID
然后
var results = from ti in TaskInstanceList
join t in Task on ti.taskID equals t.taskID
备注:此文本应通过评论 - 我的声誉不允许写一个
答案 1 :(得分:0)
解决。
我的一个SelectAll语句被窃听。这很奇怪,因为我已经彻底测试了它们并且在一小时前使用它没有任何问题。也许我不小心碰到了某些东西或撞了一把钥匙。