将SQL转换为LINQ与日期
问题描述:
我想将以下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)
感谢
答
的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));
答
另外,为了避免调用这些静态方法的一种方式是获得上,下这样的日期:
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);
你使用实体框架还是你使用其他的ORM库来做你的SQL查询。做到这一点的方法是特定于图书馆。 –
实体框架 – Prathyush
您可能想查看[EntityFunctions Class](https://msdn.microsoft.com/en-us/library/system.data.objects.entityfunctions(v = vs.110).aspx) – juharr