2015-03-20 2 views
2

У меня есть таблица с двумя столбцами, как BookingArrivedEnquiredTime с VARCHAR типа данных и даты и времени BookingArrivedEnquiredDateTime. Когда я выполнить этот запрос в SQL Server результат дают предано время Порядок сортировки запрос SQL будет какКак написать запрос linq из SQL-запроса с помощью LINQ?

select BookingArrivedEnquiredTime from BookingArriveds where BookingArrivedEnquiredDateTime='2015-02-17 00:00:00.000' 
order by CAST(('01/01/2000 ' + BookingArrivedEnquiredTime) AS DATETIME) 

и выдает ставить как этот

11:27 AM 
11:47 AM 
11:53 AM 
12:13 PM 
12:50 PM 
02:02 PM 
02:47 PM 
03:04 PM 
03:16 PM 

Когда я попробовать этот запрос в с помощью LINQ

public ViewResult Index1(DateTime? Startdate) 
{ 
    Startdate = DateTime.Now.Date; 
    var fm = DateTime.Parse("01/01/2000"); 
    var qr = from item in db.BookingArriveds 
      where item.BookingArrivedEnquiredDateTime == Startdate 
      orderby DateTime.Parse("01/01/2000 " + 
      item.BookingArrivedEnquiredTime.ToString()) 
      select item; 
    return View(qr); 
} 

, но он дает ошибку, как этот

LINQ к Entities не распознает метод «System.DateTime Разбор (System.String)» метод, и этот метод не может быть переведен в выражение магазина.

, где не так и мне нужна помощь для того, как переписать выше SQL запроса в Linq запрос также отливки из VARCHAR к DateTime в LINQ?

+1

Вы пытаетесь написать запрос, который будет выполняться в SQL, но вы используете методы C#, такие как 'DateTime.Parse() ', SQL не распознает их. –

+0

ok omri, но как написать этот запрос в linq? –

+0

Почему бы не разобрать его позже? Вы можете заказать элемент item.BookingArrivedEnquiredTime, так как указанная вами префиксная дата такая же, поэтому заказ без нее с использованием только даты должен давать одинаковые результаты. –

ответ

0

У вас есть два варианта:

вы можете сделать отливку и сортировочных на клиенте:

db.BookingArriveds 
    .Where(item => item.BookingArrivedEnquiredDateTime == Startdate) 
    .AsEnumerable() 
    .OrderBy(item => DateTime.Parse("01/01/2000 " + item.BookingArrivedEnquiredTime); 

или вы можете использовать SqlFunctions.DatePart сделать бросок в сервере Sql: https://msdn.microsoft.com/en-us/library/system.data.objects.sqlclient.sqlfunctions(v=vs.110).aspx

EDIT: Функция DatePart не подходит, поскольку она дает вам только дату. Чтобы выполнить кастинг на SQL-сервере, вы должны определить свою собственную функцию sql: https://msdn.microsoft.com/en-us/library/vstudio/dd456847(v=vs.100).aspx

Вопрос в том, почему вы храните BookingArrivedEnquiredTime в столбце varchar. Я считаю, что он должен быть частью BookingArrivedEnquiredDateTime или он должен храниться как целочисленный или числовой столбец

+0

---> Я попробовал ваш запрос, он отлично работает, сортируя am до pm, но он не отсортировался после 12, я дам выборку здесь -> 12:48 AM 06:02 07:06 08:41 AM 09:41 AM 12:38 PM 18:02 19:06 20:41 PM –

+0

Я не вижу проблемы на выходе. Он сортируется так, как должно быть. 12:38 PM -> 12:38; 18:02 -> 18:02 и т. Д. – Liero

+0

ваш запрос работает отлично. –

1

Как уже ответили, это ломает, потому что .ToString не удается перевести на соответствующий SQL на пути в базу данных.

Однако, Microsoft предоставляет SqlFunctions class, который представляет собой набор методов, которые могут быть использованы в подобных ситуациях.

В этом случае, что вы ищете здесь SqlFunctions.StringConvert:

public ViewResult Index1(DateTime? Startdate) 
{ 
    Startdate = DateTime.Now.Date; 
    var fm = DateTime.Parse("01/01/2000"); 
    var qr = from item in db.BookingArriveds 
      where item.BookingArrivedEnquiredDateTime == Startdate 
      orderby SqlFunctions.StringConvert("01/01/2000 " + 
      item.BookingArrivedEnquiredTime.ToString()) 
      select item; 
    return View(qr); 
} 

Хорошо, когда решение с временными переменными не желательно по каким-либо причинам.

+0

, это делает сортировку по алфавиту в поле строки, что неверно. Ему нужно преобразовать BookingArrivedEnquiredTime в datetime – Liero

+0

Мой рабочий код помогает устранить эту ошибку! –

Смежные вопросы