【问题标题】:LINQ : ASP.NET EntityDataSource Beginner's SyntaxLINQ:ASP.NET EntityDataSource 初学者的语法
【发布时间】:2012-02-11 04:01:40
【问题描述】:

我是 ASP.NET 新手,对语法有一些疑问... 我有几个 SQL 数据库表,其中包含有关ride_reservations、车辆和管理选项的信息。这是一个 asp.net 程序功能,它将选择下一个最佳乘车预订发送到特定车辆。

我试图开始(并找出语法),用数据库中位于两个有效日期之一的游乐设施填充一个 C# ArrayList,首先按最旧的调用排序。

提前致谢!

**编辑:另一个问题是“TimeOfCall”数据库列是“datetime2(7)”类型,而 ValidDate1/2 数据库列是“日期”类型...我可以比较这些吗?

借助一些语法帮助:下面:我更接近但收到以下运行时错误:

序列不包含任何元素

说明:在执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

Exception Details: System.InvalidOperationException: Sequence contains no elements

Source Error: 


Line 27:         protected void getAllRides()
Line 28:         {
Line 29:             using (RamRideOpsEntities myEntities = new RamRideOpsEntities())
Line 30:             {
Line 31:                 var adminOptions = (from a in myEntities.AdminOptions

Source File: D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs    Line: 29 

Stack Trace: 


[InvalidOperationException: Sequence contains no elements]
   System.Linq.Enumerable.First(IEnumerable`1 source) +336
   System.Data.Objects.ELinq.ObjectQueryProvider.<GetElementFunction>b__0(IEnumerable`1 sequence) +41
   System.Data.Objects.ELinq.ObjectQueryProvider.ExecuteSingle(IEnumerable`1 query, Expression queryRoot) +59
   System.Data.Objects.ELinq.ObjectQueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) +150
   System.Linq.Queryable.First(IQueryable`1 source) +265
   RamRideOps.DispatchCar.getNextRide(Int32 carNum) in D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs:29
   RamRideOps.DispatchCar.Page_Load(Object sender, EventArgs e) in D:\DOCUMENTS\RamRide\RamRideOps_PL\RamRideOps\RamRideOps\Ops\DispatchCar.aspx.cs:24
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +91
   System.Web.UI.Control.LoadRecursive() +74
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2207

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272

【问题讨论】:

    标签: c# asp.net sql linq-to-sql entitydatasource


    【解决方案1】:

    validDate1 和 validDate2 都将是 Queryable AdminOptions

    你可能想要这个

    var adminOptions = (from a in myEntities.AdminOptions
                                 select new { a.ValidDate1, a.ValidDate2 }).First();
    

    假设带有字段 ValidDate1 和 ValidDate2 的表格(不是带有键和值的 propertyBag 样式)

    现在您可以像这样乘坐您的游乐设施

    var rides = (from r in myEntities.Rides
                               where (r.TimeOfCall == adminOptions.ValidDate1 || 
                                      r.TimeOfCall == adminOptions.ValidDate2)
                               orderby TimeOfCall descending
                               select r).ToList();
    

    ToList() 将避免在最后执行循环来构建数组。

    这应该几乎可以解决您的语法问题。

    编辑

    我错过了将 TimeOfCall 中的 r 放在 orderby 行中

    var rides = (from r in myEntities.Rides
                               where (r.TimeOfCall == adminOptions.ValidDate1 || 
                                      r.TimeOfCall == adminOptions.ValidDate2)
                               orderby r.TimeOfCall descending
                               select r).ToList();
    

    我认为你真的需要看看在这个地方做一些教程,或者买一本关于这个主题的好书。一个下午的阅读可能会为您节省很多挫败感。

    【讨论】:

    • 太棒了,谢谢!剩下的唯一奇怪的事情是它告诉我“TimeOfCall 在当前上下文中不存在”......指的是 'orderby' 语句......不知道为什么它只对“TimeOfCall”的使用有问题而不是其他人。它应该存在。有什么想法吗?
    • Dang,看来我还是有问题,即使我删除了 orderby 语句,我也会收到运行时错误(可能相关?):(上面添加的错误 ^)
    • 该运行时错误是因为第一个查询没有返回任何内容。我只猜测了 AdminOptions 表的结构。在我帮助你之前,你必须非常清楚它的结构。
    • AdminOptions 表中有数据吗?
    • 是的,表中有数据,实际上 adminoptions 部分似乎很好,它是导致问题的 Rides 表。它是我通过 EntityDataSource 连接到的 Microsoft SQL DB 服务器。我可以为您提供哪些信息以便您提供帮助?
    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    相关资源
    最近更新 更多