C# 在控制器中访问查询返回列表的值
这是我的课程表C# 在控制器中访问查询返回列表的值,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,这是我的课程表 [Table("Schedules", Schema = "Expedia")] public class Schedule { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ScheduleId { get; set; } [ForeignKey("Inventory")]
[Table("Schedules", Schema = "Expedia")]
public class Schedule
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ScheduleId { get; set; }
[ForeignKey("Inventory")]
public int FlightId { get; set; }
public FlightInventory Inventory { get; set; }
[Display(Name = "Departure city")]
public string DepartureCity { get; set; }
[Display(Name = "Arrival city")]
public string DestiationCity { get; set; }
[Display(Name = "Departure date")]
[Required]
public string DepartureDate { get; set; }
[Required]
[Display(Name = "Arrival date")]
public string ArrivalDate { get; set; }
[Required]
[Display(Name = "Departure Time")]
public string Departure { get; set; }
[Required]
[Display(Name = "Arrival Time")]
public string Arrival { get; set; }
[Display(Name = "Price/Ticket")]
public int Price { get; set; }
}
}
这是我的上下文类
public class UsersContext : DbContext
{
public UsersContext()
: base("Expedia") { }
public DbSet<Schedule> schedules { get; set; }
}
当我在控制器中调用此选项时:
var result= x.Details(selectedID);
尽管查询返回值,结果变量仍显示null
值
如何在控制器中访问查询结果
请提供任何链接、参考、提示。当使用返回一系列值的Enumerable()查询时,在枚举查询对象之前,不要使用目标数据。这称为延迟执行。 所以试着得到这样的值
var result= x.Details(selectedID).ToList();
首先:当您调用
ToList()
或AsEnumerable()
扩展方法时,您的查询将立即执行,这可能会在返回大量数据时影响性能。在foreach循环中,您将无法获得收益率的优势
Second:为什么使用dynamic
类型?您可以为返回的数据定义一个类,而不是使用匿名类型,并从方法返回该类。而且,我猜,您的方法应该只返回一个项或null(如果没有具有指定索引的项),这样您就可以使用FirstOrDefault()
扩展方法
总结如下:
public class YourReturnType
{
public int ScheduleId {get; set;}
// other properties
}
public YourReturnType Details(int ScheduleID)
{
var scheduleItem = db.schedules.FirstOrDefault(f => f.ScheduleId== ScheduleID);
if (scheduleItem == null) return null;
return new YourReturnType
{
ScheduleId = scheduleItem.ScheduleId,
// assign other properties
};
}
编辑:如果返回某种匿名类型的集合,并且方法的返回类型是动态的,以查询此集合,则应将其强制转换为适当的类型。如果要按索引访问项目,则应将其强制转换为IList:
var result = ((IList)Details(SomeId))[index];
详细信息方法的返回类型必须是IEnumerable
public IEnumerable<dynamic> Details(int ScheduleID)
public IEnumerable详细信息(int ScheduleID)
Quickwatch x.Details(选择edid);此行感谢您的回答我尝试了上述解决方案,但它给出了此错误“object”不包含“ToList”Quickwatch x.Details的定义(selectedID);这一行并告诉您什么是必要的getToList(),查询已在Details方法中使用ToList()执行。感谢您的回复,我已使用var result=x在controller中获得查询结果。Details(SelecteId)如何访问中结果[0]中的值controller@ChhavishJ,你是在说我的代码示例吗?因为我提供的方法只返回元素,如果找不到,则返回null。如果您谈论的是代码(使用动态返回类型),而不是从方法返回集合并希望访问第一个集合,则应该将返回值强制转换为IEnumerable或其他类型。看看上面,我会更新我的答案。
public IEnumerable<dynamic> Details(int ScheduleID)