C# 此函数只能从Linq调用到实体框架中的实体

C# 此函数只能从Linq调用到实体框架中的实体,c#,entity-framework,linq,C#,Entity Framework,Linq,为什么底部linq到实体可以工作,而顶部被注释掉的查询却不能工作 var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserId == userId).First(); var yogaSpace = yogaProfile.YogaSpaces.Where(j => j.YogaSpaceId == yogaSpaceId).First(); if (yogaSpace == null) throw

为什么底部linq到实体可以工作,而顶部被注释掉的查询却不能工作

var yogaProfile = dbContext.YogaProfiles.Where(i => i.ApplicationUserId == userId).First();
var yogaSpace = yogaProfile.YogaSpaces.Where(j => j.YogaSpaceId == yogaSpaceId).First();

if (yogaSpace == null)
 throw new Exception("You Don't Have A Yoga Space With This ID!");

var todayPlus30 = DateTime.Now.AddDays(30);
var yesterday = DateTime.Now.Date.AddDays(-1);

// Does not work!!
//var yogaEvents = yogaSpace.YogaSpaceEvents.Where(k => 
//    DbFunctions.TruncateTime(k.EventDateTime) > DbFunctions.TruncateTime(yesterday) && 
//    DbFunctions.TruncateTime(k.EventDateTime) < DbFunctions.TruncateTime(todayPlus30)).ToList();


var yogaEvents = yogaSpace.YogaSpaceEvents.Where(k =>
 k.EventDateTime.Date > yesterday &&
 k.EventDateTime.Date < todayPlus30);
var yogaProfile=dbContext.yogaProfile.Where(i=>i.applicationserid==userId).First();
var yogaSpace=yogaProfile.YogaSpaces.Where(j=>j.YogaSpaceId==YogaSpaceId.First();
if(yogaSpace==null)
抛出新的异常(“你没有这个ID的瑜伽空间!”);
var todayPlus30=DateTime.Now.AddDays(30);
var昨天=DateTime.Now.Date.AddDays(-1);
//不行!!
//var yogaEvents=yogaSpace.YogaSpaceEvents.Where(k=>
//DbFunctions.TruncateTime(k.EventDateTime)>DbFunctions.TruncateTime(昨天)和
//DbFunctions.TruncateTime(k.EventDateTime)
k、 EventDateTime.Date>昨天&&
k、 EventDateTime.Date
问题在于您没有在正确的上下文中使用
DbFunctions
。这些可以在Linq To实体中使用,但您已经使用实体框架获取了
yogaSpace
对象

现在您正试图从另一个IEnumerable类型的数据中获取数据
YogaSpaceEvents
因此它不能与
Linq To Object
上下文一起工作

在这种情况下,您可以使用标准日期操作来克服起始问题

参见参考资料:



问题在于您没有在正确的上下文中使用
DbFunctions
。这些可以在Linq To实体中使用,但您已经使用实体框架获取了
yogaSpace
对象

现在您正试图从另一个IEnumerable类型的数据中获取数据
YogaSpaceEvents
因此它不能与
Linq To Object
上下文一起工作

在这种情况下,您可以使用标准日期操作来克服起始问题

参见参考资料:



没有向我们展示DbFunctions.TruncateTime(…)的功能,这很难回答,因为这显然是唯一的区别。TruncateTime中的某些内容使用了DB端方法不支持的方法。
DbFunctions.etc(…
不是Linq函数,因此如果不向我们显示什么DbFunctions.TruncateTime(…)确实很难回答这个问题,因为这显然是唯一的区别。TruncateTime中的某些内容使用了DB端方法不支持的方法。
DbFunctions.etc(..
不是Linq函数,因此它不起作用