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)