查询中的Linq Convert.ToInt32

本文关键字:Convert ToInt32 Linq 查询 | 更新日期: 2023-09-27 17:57:27

我有一些代码:

(from AspNetUsers in db.AspNetUsers
join UserDetails in db.UserDetails on new { Id = Convert.ToInt32(AspNetUsers.UserDetailId) } equals new { Id = UserDetails.Id } into UserDetails_join
where
AspNetUsers.Email == "mickeymouse@blueyonder.co.uk"
select new
{
   AspNetUsersId = AspNetUsers.AspNetUsersId,
   UsertId = (int?)UserDetails.UserID
}).ToList();

(这是一个包含许多联接的更大查询的片段)

无论如何,我的问题是查询在Linger程序中运行得很好,但当我将查询复制到VS 2013时,由于Convert.ToInt32,它失败了。

不知道为什么?

查询中的Linq Convert.ToInt32

不能在linq中对实体使用Convert.ToInt32

一种方法是"在内存中"完成所有这些(列举所有)。

当然,这对表现真的很不利。

另一种方式,在你的情况下,是

第一个:在联接中以另一种方式执行(在string中转换int:因为这种方式在linq中对实体是可行的)。

=>new { Id = AspNetUsers.UserDetailId } equals new { Id = SqlFunctions.StringConvert((double)UserDetails.Id) }

然后:只获取所需的数据,在linq中枚举并强制转换为对象。

select new
{
   AspNetUsersId = AspNetUsers.AspNetUsersId,
   UsertId = UserDetails.UserID
}).ToList()
.Select (m => new {
   m => m.AspNetUsersId,
   UsertId = (int?)m.UsertId
});

最后:最好的方法是不将int存储为varchar。。。

您可以使用cast(即(int?)AspNetUsers.UserDetailId)而不是Convert,EF提供程序应该实现它(与提供程序相关)。SQL Server EF提供程序可能会将其转换为CAST AS