LINQ: Синтаксис для начинающих ASP.NET EntityDataSource - PullRequest
1 голос
/ 16 января 2012

Я новичок в ASP.NET и у меня есть несколько вопросов о синтаксисе ... У меня есть несколько таблиц БД SQL, в которых хранится информация о поездках, транспортных средствах и параметрах администратора. Это для функции программы asp.net, которая выберет следующую лучшую бронь для поездки на определенное транспортное средство.

Я пытаюсь начать (и выяснить синтаксис), заполнив Cray ArrayList наборами в БД, которые находятся в одну из двух допустимых дат, отсортированных по самому старому вызову.

Заранее спасибо!

** Редактировать: также другая проблема заключается в том, что столбец базы данных «TimeOfCall» имеет тип «datetime2 (7)», а столбцы «Базы данных ValidDate1 / 2» имеют тип «дата» ... Могу ли я сравнить их?

С некоторой синтаксической справкой: ниже: я ближе, но получаю следующую ошибку во время выполнения:

Последовательность не содержит элементов

Описание: во время выполнения текущего веб-запроса произошло необработанное исключение. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и ее возникновении в коде.

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

enter image description here

1 Ответ

1 голос
/ 17 января 2012

validDate1 и validDate2 оба будут запрашиваемыми 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 () избавит от необходимости делать цикл в конце для построения массива.

Это должно в значительной степени исправить ваш синтаксис.

РЕДАКТИРОВАТЬ

Я пропустил ввод r в TimeOfCall в строке заказа

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

Я думаю, вам действительно нужно посмотреть несколько учебных пособий или купить хорошую книгу на эту тему. Чтение после полудня может спасти вас от разочарования.

...