我正在研究一个Asp.Net MVC应用程序,在其中我检索了一个int类型的CompanyId,并希望使用LINQ从数据库中检索更多数据,并且我使用以下代码来做到这一点
var companyId = db.UserProfiles.Where(u => u.UserName == User.Identity.Name)
.Select(u => u.CompanyId);
return db.CCUserHorizontals.Where(ccu=>companyId.Equals(ccu.CPId));
我companyId
从UserProfile检索并使用它与CPID
但是,当我加载页面时,它引发了如下错误
<m:message>
The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.
</m:message>
<m:type>System.InvalidOperationException</m:type>
<m:stacktrace/>
<m:internalexception>
<m:message>
Unable to cast the type 'System.Int32' to type 'System.Object'. LINQ to Entities only supports casting EDM primitive or enumeration types.
</m:message>
<m:type>System.NotSupportedException</m:type>
我可以知道解决方法吗?
您的第一个查询将返回a IQueryable<int>
,它将是整数值的集合(其中可能仅包含一个/单个值)。稍后,您尝试在查询中使用它并得到错误。
您的代码应类似于:
var companyId = db.UserProfiles.Where(u => u.UserName == User.Identity.Name)
.Select(u => u.CompanyId)
.FirstOrDefault();
return db.CCUserHorizontals.Where(ccu => ccu.CPId == companyId);
需要注意的几件事:
FirstOrDefault
代替Where
,因为FirstOrDefault
还需要谓词喜欢:
var item = db.UserProfiles.FirstOrDefault(u => u.UserName == User.Identity.Name);
int companyId = 0;
if(item != null) companyId = item.CompanyId;
ToList
返回值以实现查询。如果您DataContext
将自己置于方法中,那么您将在调用者中获取访问方法结果的异常。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句