Запрос Entity Framework аналогичен необработанному SQL-запросу с упорядочением по дате, когда последнее значение равно нулю - PullRequest
0 голосов
/ 10 января 2019

У меня есть запрос

SELECT *
  FROM [ExcelDumps].[dbo].[ProductPrice] As p
  Where  
   ( 
    p.[EndDate] >= '2018-12-18' 
    OR
    p.[EndDate] is null 
   ) 
   order by case when p.[EndDate] is null then 2 else 1 end, p.[EndDate] asc

что я пытаюсь достичь, это то, что можно достичь тех же результатов, используя Entity Framework, где приоритет наконец отдается p. [EndDate]

желаемый результат выглядит следующим образом:

что я сделал

 using (var cod = new ExcelDumpsEntities1())
            {
                var list = cod.ProductPrices.Where(c => c.EndDate >= c.EndDate || c.EndDate == null)
                                            .OrderBy(c => c.EndDate)
                                            .FirstOrDefault();

                var sqlQuery = @"SELECT Top 1 *
                                  FROM [ExcelDumps].[dbo].[ProductPrice] As p
                                  Where  
                                   ( 
                                    p.[EndDate] >= '2018-12-18' 
                                    OR
                                    p.[EndDate] is null 
                                   ) 
                                   order by case when p.[EndDate] is null then 2 else 1 end, p.[EndDate]  asc ";
                var sqlRaw = cod.ProductPrices.SqlQuery(sqlQuery) 
                                            .FirstOrDefault();
            }
            Console.ReadLine();

Я не хочу использовать SQL-запрос или хранимую процедуру, но должен делать это подобно LINQ для сущностей

этот вопрос основан на этом вопросе на dba sql запрос здесь

Как я могу это сделать в Entity Framework

1 Ответ

0 голосов
/ 10 января 2019
var filterDate = new DateTime("2018-12-18");
var result = cod.ProductPrices.Where(c => c.EndDate >= filterDate || c.EndDate == null)     
     .OrderBy(c => c.EndDate == null)
     .ThenBy(c => c.EndDate);

Если вы хотите выполнить запрос немедленно, вы можете добавить .ToList () в конце. В противном случае оно будет выполнено при его использовании.

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