无法将类型'System.Linq.IQueryable <Project.Models.TaskTimeLine>'隐式转换为'Project.Models.TaskTimeLine'

Chr*_*rry 1 c# asp.net-mvc model

我正在尝试将自定义形状的类传递给视图,但我遇到了一些麻烦.

这是我得到的错误.

无法将类型'System.Linq.IQueryable'隐式转换为'Project.Models.TaskTimeLine'.存在显式转换(您是否错过了演员?)

这是我第一次向一个类添加一个列表,并尝试将一个列表传递给另一个类.

这是类定义

  public class TaskTimeLine
  {
    public Task task { get; set; } // to hold a single object 
    public List<DateTime> scheduledDateTime { get; set; } // to hold a collection of    date times..

  }
Run Code Online (Sandbox Code Playgroud)

控制器动作与此类似.

 [Authorize]
    public ActionResult Details2(int id)
    {
        TaskTimeLine task = new TaskTimeLine(); //create new instance of TaskTimeLine
        task = (IQueryable<TaskTimeLine>)taskRepository.GetTaskAndTimeLine(id);

        if (task == null)
            return View("NotFound");
        else
            return View("Details", task);
    }
Run Code Online (Sandbox Code Playgroud)

直到现在都很正常,所以我猜这里可能出现了问题.

  public IQueryable<TaskTimeLine> GetTaskAndTimeLine(int taskId)
    {
       TaskTimeLine taskTimeLine = new TaskTimeLine(); // create new main object
       taskTimeLine.scheduledDateTime = new List<DateTime>(); instanciate list object inside          
       taskTimeLine.task = db.Tasks.SingleOrDefault(d => d.id == taskId); read the record to fill the single task object


       /// Lots of logic is performed here to add loads of date records to the list object.

       /// If I add a break point and check the list I can see that all the date items have gone fine into the collection           


       return (IQueryable<TaskTimeLine>)taskTimeLine;
    }
Run Code Online (Sandbox Code Playgroud)

我在这些地方有这么多奇数演员的唯一原因是因为它们似乎有助于程序编译.它目前没有编译,但我确实得到了,但在运行实际请求时它失败了,并显示相同的错误消息.

任何人都可以提供帮助,也许还可以为那些坚持这种事情的未来人们添加一个更有用的标题.

Mar*_*ell 9

taskTimeLine是一个TaskTimeLine; 为什么它也会是一个IQueryable<TaskTimeLine>

  TaskTimeLine taskTimeLine = new TaskTimeLine(); // create new main object
  ....
  return (IQueryable<TaskTimeLine>)taskTimeLine;
Run Code Online (Sandbox Code Playgroud)

IQueryable<T>涉及数据来源 - 不是数据本身的实例(可能的例外:) Enumerable.AsQueryable().

我怀疑你的方法GetTaskAndTimeLine应该简单地返回TaskTimeLine; 并失去了很多演员......

public TaskTimeLine GetTaskAndTimeLine(int taskId)
{
   TaskTimeLine taskTimeLine = new TaskTimeLine(); // create new main object
   ...[snip]
   return taskTimeLine;
}
...
TaskTimeLine task = taskRepository.GetTaskAndTimeLine(id);
Run Code Online (Sandbox Code Playgroud)