Запрос LINQ сравнивает столбец DateTime со строковым столбцом DateTime - PullRequest
0 голосов
/ 16 июня 2020

У меня есть таблица с 3 столбцами, как показано ниже:

DeliveryDate(string) | 2020-06-16
DeliveryTime(string) | 20:00:00
EstimateDeliveryDateTime(DateTime) | 2020-06-15 20:00:00.232

Я написал условие ниже в LINQ, ожидайте, что оно преобразуется в sql ядром ef, но не удалось. EstimateDeliveryDateTime > Convert.ToDateTime(DeliveryDate + DeliveryTime)

Я знаю AsEnumberable (). Но я хочу, чтобы это условие выполнялось в db, выполнимо ли это в LINQ или нет?

Ответы [ 4 ]

0 голосов
/ 19 июня 2020

Наконец, я создаю sql View для преобразования DeliveryDate + DeliveryTime в один столбец DateTime. А затем используйте объект без ключа ef core для запроса представления.

0 голосов
/ 16 июня 2020

EstimateDeliveryDateTime> Convert.ToDateTime (DeliveryDate + "" + DeliveryTime)

0 голосов
/ 16 июня 2020

Вы можете написать свой собственный метод / метод расширения для преобразования строки в DateTime в соответствии со строковым форматом ie. yyyy-dd-MM hh:mm:ss. Вот мое предложение:

Реализация:

private void Example()
{
    string DeliveryDate = "2020-06-16";
    string DeliveryTime = "20:00:00";
    DateTime EstimateDeliveryDateTime = DateTime.Now;

    if (EstimateDeliveryDateTime < DeliveryDate.ToDate(DeliveryTime))
    {
        // do something....
    }
}

Метод расширения:

public static DateTime ToDate(this string wanabedate, string wanabetime)
{
    try
    {
        string[] mydate = wanabedate.Split('-').ToArray();
        if (mydate == null || mydate.Length < 3)
        {
            return DateTime.MinValue;
        }

        string[] mytime = wanabetime.Split(':');

        // create date time
        var year = Convert.ToInt32(mydate[0]);
        var day = Convert.ToInt32(mydate[2]);
        var month = Convert.ToInt32(mydate[1]);

        var seconds = Convert.ToInt32(mytime[2]);
        var mins = Convert.ToInt32(mytime[1]);
        var hr = Convert.ToInt32(mytime[0]);

        DateTime result = new DateTime(year, month, day, hr, mins, seconds, 0);

        return result;
    }
    catch (Exception ex)
    {
        return DateTime.MinValue;
    }
}
0 голосов
/ 16 июня 2020

Как насчет использования DateTime.ParseExact?

EstimateDeliveryDateTime > DateTime.ParseExact(DeliveryDate + DeliveryTime, "yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture")

Надеюсь, это будет полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...