Entity framework 在Linq to实体中选择2列值时出现问题

Entity framework 在Linq to实体中选择2列值时出现问题,entity-framework,linq-to-sql,asp.net-mvc-2,linq-to-entities,Entity Framework,Linq To Sql,Asp.net Mvc 2,Linq To Entities,您好,我正在尝试选择第二个驱动程序和价格两列的值,但出现错误:无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换(是否缺少转换? 代码如下: public IQueryable<Event> GetSecondDriverOption(int eventID) { ApextrackdaysEntities entity = new ApextrackdaysEntities();

您好,我正在尝试选择第二个驱动程序和价格两列的值,但出现错误:无法将类型“System.Linq.IQueryable”隐式转换为“System.Linq.IQueryable”。存在显式转换(是否缺少转换?

代码如下:

 public IQueryable<Event> GetSecondDriverOption(int eventID)
 {
     ApextrackdaysEntities entity = new ApextrackdaysEntities();
     IQueryable<Event> SecondDriver = from p in entity.Events
                                      where p.ID == eventID
                                      select new{ p.SecondDriver,
                                                  p.SecondDriverPrice};
     return SecondDriver;
 }
public IQueryable GetSecondDriverOption(int-eventID)
{
ApextrackdaysEntities实体=新的ApextrackdaysEntities();
IQueryable SecondDriver=来自entity.Events中的p
其中p.ID==eventID
选择新的{p.SecondDriver,
p、 二级驱动程序};
返回第二个驱动程序;
}

如果您希望
IQueryable
其中
Event
是您的映射类型,则无法使用投影,我们将非常感谢您提供的任何帮助或建议。您必须选择
事件

IQueryable<Event> SecondDriver = from p in entity.Events
                                 where p.ID == eventID
                                 select p;
并重新定义您的方法:

public IQueryable<EventDto> GetSecondDriverOption(int eventID)
{
    ApextrackdaysEntities entity = new ApextrackdaysEntities();
    IQueryable<EventDto> SecondDriver = from p in entity.Events
                                        where p.ID == eventID
                                        select new EventDto 
                                            {
                                                SecondDriver = p.SecondDriver,
                                                SecondDriverPrice = p.SecondDriverPrice
                                            };
    return SecondDriver;
}
public IQueryable GetSecondDriverOption(int-eventID)
{
ApextrackdaysEntities实体=新的ApextrackdaysEntities();
IQueryable SecondDriver=来自entity.Events中的p
其中p.ID==eventID
选择“新建事件”按钮
{
SecondDriver=p.SecondDriver,
SecondDriverPrice=p.SecondDriverPrice
};
返回第二个驱动程序;
}

当您希望
IQueryable
其中
Event
是您的映射类型时,您不能使用投影。您必须选择
事件

IQueryable<Event> SecondDriver = from p in entity.Events
                                 where p.ID == eventID
                                 select p;
并重新定义您的方法:

public IQueryable<EventDto> GetSecondDriverOption(int eventID)
{
    ApextrackdaysEntities entity = new ApextrackdaysEntities();
    IQueryable<EventDto> SecondDriver = from p in entity.Events
                                        where p.ID == eventID
                                        select new EventDto 
                                            {
                                                SecondDriver = p.SecondDriver,
                                                SecondDriverPrice = p.SecondDriverPrice
                                            };
    return SecondDriver;
}
public IQueryable GetSecondDriverOption(int-eventID)
{
ApextrackdaysEntities实体=新的ApextrackdaysEntities();
IQueryable SecondDriver=来自entity.Events中的p
其中p.ID==eventID
选择“新建事件”按钮
{
SecondDriver=p.SecondDriver,
SecondDriverPrice=p.SecondDriverPrice
};
返回第二个驱动程序;
}

您不能返回匿名对象。试着这样做:

public IQueryable<Event> GetSecondDriverOption(int eventID)
{
    ApextrackdaysEntities entity = new ApextrackdaysEntities();
    var seconDriver = 
           from p in entity.Events
           where p.ID == eventID;
           select p;
    return secondDriver;
}
public IQueryable GetSecondDriverOption(int-eventID)
{
ApextrackdaysEntities实体=新的ApextrackdaysEntities();
var seconDriver=
来自entity.Events中的p
其中p.ID==eventID;
选择p;
返回第二个驱动程序;
}

您不能返回匿名对象。试着这样做:

public IQueryable<Event> GetSecondDriverOption(int eventID)
{
    ApextrackdaysEntities entity = new ApextrackdaysEntities();
    var seconDriver = 
           from p in entity.Events
           where p.ID == eventID;
           select p;
    return secondDriver;
}
public IQueryable GetSecondDriverOption(int-eventID)
{
ApextrackdaysEntities实体=新的ApextrackdaysEntities();
var seconDriver=
来自entity.Events中的p
其中p.ID==eventID;
选择p;
返回第二个驱动程序;
}

但我想要两列,而不仅仅是secondDriver,这样我就可以在控制器中调用secondDriver.price,反之亦然class@Muhammad另外,您应该使用视图模型,以便控制器查询数据并填充将传递给视图的视图模型。此视图模型将包含视图所需的属性。您是指自定义形状的视图模型类..?@Muhammad Awais,这正是我的意思。但我希望这两个列不只是secondDriver,我可以在控制器中调用secondDriver.price,viceversa这样的操作吗class@MuhammadAwais,您应该使用视图模型,以便控制器查询数据并填充该视图模型,该视图模型将传递给视图。此视图模型将包含视图所需的属性。您是指自定义形状的视图模型类..?@Muhammad Awais,这正是我的意思。您使用的类eventd是自定义形状的视图模型类。可以随意调用它。它是一个只允许您选择两列/属性并从方法返回它们的类。您使用的EventDto类是自定义形状的视图模型类。可以随意调用它。该类只允许您选择两个列/属性并从方法返回它们。