2016-07-25 92 views
-2

我想將以下sql命令轉換爲LINQ,但感到困惑是什麼是可能性轉換爲相同的輸出。將SQL轉換爲LINQ與日期

Select * 
    from [A].[dbo].[SOMETABLE] 
where lossdate >= dateadd(m, datediff(m, 0, GETDATE()) - 1, 0) 
    AND lossdate < dateadd(m, datediff(m, 0, GETDATE()), 0) 

感謝

+0

你使用實體框架還是你使用其他的ORM庫來做你的SQL查詢。做到這一點的方法是特定於圖書館。 –

+0

實體框架 – Prathyush

+0

您可能想查看[EntityFunctions Class](https://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions(v = vs.110).aspx) – juharr

回答

0

SqlFunctions類在查詢中使用時轉換到SQL服務器功能的方法。 (如果您使用的是.NET 3.5使用this version捆綁了實體框架代替)

您的查詢將直接轉換爲

db.SomeTable.Where(x => x.LossDate >= SqlFunctions.DateAdd("m", SqlFunctions.DateDiff("m", "0", SqlFunctions.GetDate()) - 1, 0) && 
         x.LossDate < SqlFunctions.DateAdd("m", SqlFunctions.DateDiff("m", "0", SqlFunctions.GetDate()), 0)); 
0

另外,爲了避免調用這些靜態方法的一種方式是獲得上,下這樣的日期:

var end = new DateTime(DateTime.Now.Year,DateTime.Now.Month,1); 
var start =DateTime.Now.Month==1? new DateTime(DateTime.Now.Year-1, 12, 1): 
            new DateTime(DateTime.Now.Year, DateTime.Now.Month-1, 1); 

var query= context.SomeDbSet.Where(e=>e.LossDate>=start && e.LossDate<end);