实体框架查询类似于原始SQL查询,其中按日期排序(其中null排在最后)

时间:2019-01-10 09:09:30

标签: c# entity-framework

我有一个查询

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 query here上的此问题

我该如何在实体框架中做到这一点

1 个答案:

答案 0 :(得分:4)

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()。否则,它将在使用时执行。