这是我的时间表类
[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; }
}
}下面是我的context类
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值,尽管查询返回一个值。
如何在控制器中访问查询结果?
请提供任何链接,参考,提示。
发布于 2013-10-10 14:35:43
在使用返回一系列值的Enumerable()查询时,在枚举查询对象之前不会使用目标数据。这就是所谓的延迟执行。
因此,尝试像这样获取值
var result= x.Details(selectedID).ToList();发布于 2013-10-10 15:14:13
首先:当您调用ToList()或AsEnumerable()扩展方法时,您的查询将立即执行,这会在返回大量数据的情况下影响性能。而且你不会在foreach循环中获得 You 的优势。
Second:为什么要使用dynamic类型?您可以为返回的数据定义一个类,而不是使用匿名类型,并从您的方法返回这个类。而且,我猜,您的方法应该只返回一个item或null (如果没有具有指定索引的item ),这样您就可以使用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];发布于 2013-10-10 17:18:46
Details方法返回类型必须为IEnumerable< dynamic >。
public IEnumerable<dynamic> Details(int ScheduleID)https://stackoverflow.com/questions/19288601
复制相似问题