Entity framework 实体框架查询的Lambda表达式
我一直在尝试映射以下sql:Entity framework 实体框架查询的Lambda表达式,entity-framework,lambda,Entity Framework,Lambda,我一直在尝试映射以下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 转换为与实体框
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查询表达式。我非常感谢你的帮助 我认为下面的代码应该可以工作
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。我无法完全理解datediff/dateadd部分,看起来您正在确定自给定datetime以来的总天数,这是我假设的
可能是datetime减法后跟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(),查询将被执行,您可以计算实体框架不支持的内容。同样,如果第一次尝试成功,那么如果自X起的天数是您所需要的,那么这是最好的解决方案
from item in q.ToList()
select new
{
dt.Ad
(dt.CreatedAt - compareDt).Days,
DId,
Amount
};
我认为下面的代码应该可以工作
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。我无法完全理解datediff/dateadd部分,看起来您正在确定自给定datetime以来的总天数,这是我假设的
可能是datetime减法后跟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(),查询将被执行,您可以计算实体框架不支持的内容。同样,如果第一次尝试成功,那么如果自X起的天数是您所需要的,那么这是最好的解决方案
from item in q.ToList()
select new
{
dt.Ad
(dt.CreatedAt - compareDt).Days,
DId,
Amount
};
ad是否具有指向dt的导航属性,反之亦然?是的,dt具有指向ad的FK属性,它是ad的PK(ad.ADId)。ad是否具有指向dt的导航属性,反之亦然?是的,dt具有指向ad的FK属性,它是ad的PK(ad.ADId)。1抱怨“不支持”?\1抱怨“不支持”?