Mik*_*sen 10 .net c# linq entity-framework
好吧,我必须做一些愚蠢的事情,但这不应该起作用吗?我有以下三个清单:
var commonViews = (from v in context.TPM_VIEWS where v.VIEWID < 0 select v); // IQueryable<TPM_VIEWS>
var ownedViews = (from v in context.TPM_VIEWS where v.OWNERID == userId && v.VIEWID > 0 select v); // IQueryable<TPM_VIEWS>
var sharedViews = (from v in context.TPM_USER.Include("TPM_VIEWS2") where v.USERID == userId select v).First().TPM_VIEWS2; // EntityCollection<TPM_VIEWS>
Run Code Online (Sandbox Code Playgroud)
每个列表都有适当的值和计数.我可以返回以下任何一个列表:
return commonViews.ToList();
Run Code Online (Sandbox Code Playgroud)
我可以返回以下任意两个列表:
return commonViews.Concat(ownedViews).ToList();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试返回所有三个时:
return commonViews.Concat(ownedViews).Concat(sharedViews).ToList();
Run Code Online (Sandbox Code Playgroud)
我得到了例外:
无法创建"Entity.TPM_VIEWS"类型的常量值.在此上下文中仅支持基元类型或枚举类型.
我究竟做错了什么?这三个值确实是可以枚举的.大多数情况下,我问的是这个问题,因为这是保证发布后30秒我会发现问题的最好方法.
更新:
我有93%的确定问题在这里:
var sharedViews = (from v in context.TPM_USER.Include("TPM_VIEWS2") where v.USERID == userId select v).First().TPM_VIEWS2;
Run Code Online (Sandbox Code Playgroud)
这看起来像一个可枚举的TPM_VIEWS
对象列表,我可以调用ToList()
它并获取正确的数据,但它与其他列表不能很好地匹配.
更新2:
这实际上有效.指向可以告诉我原因的人!
commonViews.ToList().Concat(ownedViews.ToList()).Concat(sharedViews.ToList()).ToList();
Run Code Online (Sandbox Code Playgroud)
问题是Concat()
在EF IQueryable<T>
上将整个连接转换为单个查询.
当您调用时.Concat(sharedViews)
,您将传递嵌套实体类的标量(预加载)集合.
EF不知道如何将其转换为查询,所以它抱怨.
您可以通过调用AsEnumerable()
而不是更快地加快速度ToList()
.
归档时间: |
|
查看次数: |
255 次 |
最近记录: |