我需要在查询中将 String 转换为 Int32 值。它必须在 sql server 端完成,而不是在内存中。
我已经在模型优先方法 LINQ to Entities 中看到了如何做到这一点的答案。
这里和这里
但我需要先用代码来完成。
我将查询写入 DbSet<>。
有没有办法做到这一点?请帮忙 :)
新答案:我可以找到信息的唯一方法是使用自定义查询。例如:
from user in Users.SqlQuery("SELECT Id, CAST(Age AS INT) as Age, FirstName, LastName FROM Users")
select new
{
id = user.Id,
Age = user.Age
}
在我的测试中,您映射的实体上的每个属性值似乎都必须包含在选择中,即使您选择不包含每个属性的自定义对象也是如此。在上面的示例中,我包括了 FirstName 和 LastName,即使它们没有在选择中使用。
旧答案: 关于在 sql 端转换为字符串:如果首先将 int 转换为 double 或 decimal,则可以使用 SqlFunctions.StringConvert 在 Linq 中将 int 转换为字符串到实体的问题
from user in Users
select new
{
IdAsText = SqlClient.SqlFunctions.StringConvert((decimal)user.Id)
}
转换为浮点数或十进制是必要的,因为 sql-server 上的 STR 函数需要浮点数:为什么 SqlFunctions.StringConvert 没有 int 重载
更新:
在 LINQPad 中,上面生成的 SQL 查询结果为:
SELECT
[Extent1].[Id] AS [Id],
STR( CAST( [Extent1].[Id] AS decimal(19,0))) AS [C1]
FROM [dbo].[Users] AS [Extent1]