无法隐式转换类型“System.Linq.IQueryable '到‘Project.

2019-10-17 23:57发布

我想自定义形状类传递给视图,但我有一个小麻烦。

这是我得到的错误。

无法隐式转换类型“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..

  }

控制器动作是沿此线。

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

所有很正常到现在为止,所以我猜,也许事情错在这里。

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

我在的地方有这么多奇怪的强制类型转换的唯一原因是因为它似乎是这些帮助程序编译。 目前,它不能编译,但我没去,但在运行实际的请求失败时,用相同的错误消息。

谁能帮助,也有可能增加对被卡住这种事情谁未来的人更有用的标题。

Answer 1:

taskTimeLineTaskTimeLine ; 为什么会同时是一个IQueryable<TaskTimeLine>

  TaskTimeLine taskTimeLine = new TaskTimeLine(); // create new main object
  ....
  return (IQueryable<TaskTimeLine>)taskTimeLine;

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


Answer 2:

我有这个错误也和我加入解决了它FirstOrDefault()到该行。

在这种情况下,在这一行:

task = (IQueryable<TaskTimeLine>)taskRepository.GetTaskAndTimeLine(id).FirstOrDefault();

(这是因为IQueryable希望几个对象,你不能得到一些物体进入一个task ,只要你告诉它通过添加只得到一个FirstOrDefault()



Answer 3:

在Details2方法:

TaskTimeLine task = new TaskTimeLine(); //create new instance of TaskTimeLine
task = (IQueryable<TaskTimeLine>)taskRepository.GetTaskAndTimeLine(id);

在这里,您正在申报任务是TaskTimeLine,然后尝试在加载IQueryable<TaskTimeLine>进入该变量。 这些类型是不兼容的。

更改库方法返回一个TaskTimeLine,而不是一个IQueryable(这也将摆脱马克标识GetTaskAndTimeLine方法中铸造的问题),并删除投:

TaskTimeLine task = taskRepository.GetTaskAndTimeLine(id);


文章来源: Cannot implicitly convert type 'System.Linq.IQueryable' to 'Project.Models.TaskTimeLine'