我有一些代码:
(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 == "[email protected]"
select new
{
AspNetUsersId = AspNetUsers.AspNetUsersId,
UsertId = (int?)UserDetails.UserID
}).ToList();
(这是来自包含许多连接的更大查询的片段)
不管怎样,我遇到的问题是查询在 Linger 程序中完美运行,但是当我将查询复制到 VS 2013 时,由于 Convert.ToInt32,它失败了。
不明白为什么?
你不能使用Convert.ToInt32
在 linq to 实体中。
一种方法是“在内存中”完成所有这些(枚举所有)。
但当然这对性能来说确实很糟糕。
在你的情况下,另一种方式是
First:在连接中以另一种方式执行(转换int
in a string
:因为这种方式在 linq toEntity 中是可行的)。
=> new { Id = AspNetUsers.UserDetailId } equals new { Id = SqlFunctions.StringConvert((double)UserDetails.Id) }
Then:仅获取所需的数据,枚举并在 linq to 对象中进行强制转换。
select new
{
AspNetUsersId = AspNetUsers.AspNetUsersId,
UsertId = UserDetails.UserID
}).ToList()
.Select (m => new {
m => m.AspNetUsersId,
UsertId = (int?)m.UsertId
});
Finally:最好的方法是不要将 int 存储为 varchar...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)