我一直试图映射这个sql:
select dt.Id, dateadd(dd,datediff(dd,0,dt.CreatedAt),0) as Ct, DId, Amount
from dt, ad
where dt.ADId = ad.ADId and ad.Id = '13B29A01-8BF0-4EC9-80CA-089BA341E93D'
order by dateadd(dd,datediff(dd,0,dt.CreatedAt),0) desc, DId asc
进入与实体框架兼容的lambda查询表达式。我很感激任何帮助。
答案 0 :(得分:1)
我觉得下面的代码应该有用。
Guid dtId = new Guid("13B29A01-8BF0-4EC9-80CA-089BA341E93D");
DateTime compareDt = new DateTime(...);
var q = from dt in dts
where dt.id == dtId
orderby dt.Ad.CreatedAt, Did
select new
{
dt.Ad,
(dt.CreatedAt - compareDt).Days,
DId,
Amount
};
dtId必须在查询之外,因为实体框架映射器不理解带参数的构造函数,类似于DateTime。我无法完全找出dateiff / dateadd部分,看起来你正在确定自给定日期时间以来的总天数,这就是我所假设的。
可能是TimeSpan.Days
之后的日期时间减法在查询中不起作用。如果是这种情况,请将其拉出来:
var q = from dt in dts
where dt.id == dtId
orderby dt.Ad.CreatedAt, Did
select new
{
dt.Ad,
dt.CreatedAt,
DId,
Amount
};
这将创建一个具有DateTime CreatedAt属性的IEnumerable对象。如果现在调用.ToList(),则执行查询,并且可以计算Entity Framework不支持的内容。同样,如果第一次尝试有效,那么如果自X以来的天数是您所需的天数,那么这是最好的解决方案。
from item in q.ToList()
select new
{
dt.Ad
(dt.CreatedAt - compareDt).Days,
DId,
Amount
};