C# 使用从数据库中获取的整数,并使用它使用Linq从数据库中检索一些数据

C# 使用从数据库中获取的整数,并使用它使用Linq从数据库中检索一些数据,c#,asp.net-mvc,linq,C#,Asp.net Mvc,Linq,我正在开发一个Asp.NETMVC应用程序,在该应用程序中,我检索了一个int类型的CompanyId,我希望使用LINQ从数据库中检索更多数据,我使用以下代码来实现这一点 var companyId = db.UserProfiles.Where(u => u.UserName == User.Identity.Name) .Select(u => u.CompanyId); return db.CCUserHorizo

我正在开发一个Asp.NETMVC应用程序,在该应用程序中,我检索了一个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));
我从UserProfile中检索了
companyId
,并使用它与
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>

'ObjectContent'1'类型未能序列化'application/json'内容类型的响应正文;字符集=utf-8'。
System.InvalidOperationException异常
无法将类型“System.Int32”强制转换为类型“System.Object”。LINQ to实体仅支持强制转换EDM基元或枚举类型。
System.NotSupportedException

我可以知道这个问题的解决方法吗?

您的第一个查询将返回一个
IQueryable
,它将是一个整数值的集合(可能只包含一个/单个值)。稍后,您将尝试在查询中使用它并获得错误

您的代码应该如下所示:

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
    也接受谓词
比如:

  • 您可以/(也可以不)对返回值调用
    ToList
    ,以具体化查询。如果您的
    DataContext
    在方法中被释放,那么您将在调用方中获得访问方法结果的异常
您的第一个查询将返回一个
IQueryable
,它将是整数值的集合(可能只包含一个/单个值)。稍后,您将尝试在查询中使用它并获得错误

您的代码应该如下所示:

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
    也接受谓词
比如:

  • 您可以/(也可以不)对返回值调用
    ToList
    ,以具体化查询。如果您的
    DataContext
    在方法中被释放,那么您将在调用方中获得访问方法结果的异常