我有一个查询
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上的此问题
我该如何在实体框架中做到这一点
答案 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()。否则,它将在使用时执行。