这是我的日程安排课程
[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; }
}
这是我的函数返回查询结果:
public dynamic Details(int ScheduleID)
{
var query =(from f in db.schedules.Where(f => f.ScheduleId== ScheduleID)
select new
{
f.ScheduleId,
f.DepartureDate,
f.ArrivalDate,
f.Departure,
f.Arrival,
f.DepartureCity,
f.DestiationCity,
f.Inventory.provider,
f.Inventory.nonstop,
f.Price,
f.Inventory.Available
}).ToList();
return query.AsEnumerable();
}
当我在控制器中调用它时:
var result= x.Details(selectedID);
结果变量显示null
值,尽管查询返回值。
如何在控制器中访问查询结果?
请提供任何链接,参考,提示。
答案 0 :(得分:1)
使用返回值序列的Enumerable()查询时,在枚举查询对象之前不会使用目标数据。这称为延迟执行。
所以尝试获取像这样的值
var result= x.Details(selectedID).ToList();
答案 1 :(得分:1)
首先:当您调用ToList()
或AsEnumerable()
扩展方法时,您的查询将立即执行,这会在大量返回数据的情况下影响性能。而且你不会在 foreach 循环中获得收益率回报的优势。
第二:为什么使用dynamic
类型?您可以为返回的数据定义类,而不是使用匿名类型,并从Your方法返回此类。并且,我猜,您的方法应该只返回一个项目或 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];
答案 2 :(得分:0)
Details方法的返回类型必须是IEnumerable&lt;动态&gt;。
public IEnumerable<dynamic> Details(int ScheduleID)