C# 为什么这个LINQ join查询可以工作,而另一个不能';T
我已经使用join方法编写了两个LINQ查询。本质上,如果我切换要联接的对象的顺序,查询将不再工作并抛出错误: 无法创建“Domain.Entities.UsersSitesRole”类型的常量值。此上下文中仅支持基元类型(“如Int32、字符串和Guid”)C# 为什么这个LINQ join查询可以工作,而另一个不能';T,c#,asp.net,entity-framework,exception,C#,Asp.net,Entity Framework,Exception,我已经使用join方法编写了两个LINQ查询。本质上,如果我切换要联接的对象的顺序,查询将不再工作并抛出错误: 无法创建“Domain.Entities.UsersSitesRole”类型的常量值。此上下文中仅支持基元类型(“如Int32、字符串和Guid”) 对象privilegesForUser是从我的实体框架上下文(usersInterole)和存储库派生的实体列表。Child也是来自我的EF上下文的IQueryable。这是由EF解析它在扩展方法中得到的表达式树的方式造成的 在许多情况下
对象
privilegesForUser
是从我的实体框架上下文(usersInterole)和存储库派生的实体列表。Child
也是来自我的EF上下文的IQueryable
。这是由EF解析它在扩展方法中得到的表达式树的方式造成的
在许多情况下,查询在逻辑上是正确的,在
IEnumerable
(Linq to Objects)上执行得很好,但在Linq to Entities中失败。基本上,几乎不可能将任何逻辑表达式树编译成适当的SQL语句(SQL不是理想的,也离面向对象的世界很远),而EF放弃了这种情况。随着时间的推移,你会习惯于理解什么是有效的,什么是无效的。请同时显示抛出的异常。@Jethro:再次阅读问题。我刚刚遇到这个问题,这似乎表明我甚至不应该尝试我正在做的事(加入内存中的集合,并从数据库中获取数据)。我想知道I.ToList()是否同时包含两组数据并将它们连接起来,如果连接顺序仍然有任何影响……如果我想将30个对象与另30个对象连接起来,为了方便起见,我只需加载它们并处理客户端。对成千上万的人这样做是不可接受的。这一切都与数据量有关。此外,还可以使用SQL事件探查器确定查询的工作方式。在你的工作版本上试试,看看到底发生了什么。谢谢你的建议,好主意。此外,我还进行了测试,在我的例子中,如果我对从.ToList()创建的两个内存中对象进行操作,那么连接顺序就变得无关紧要了
var foo2 = //works
from p in privilegesForUser
join c in repository.Child on p.SiteId equals c.Child_SiteID
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };
var foo3 = //throws exception
from c in repository.Child
join p in privilegesForUser on c.Child_SiteID equals p.SiteId
select new { ChildID = c.Child_ChildID, name = c.Child_FirstName, site = c.Child_SiteID, p.PrivilegeLevel };