2

我需要在查询中将 String 转换为 Int32 值。它必须在 sql server 端完成,而不是在内存中。
我已经在模型优先方法 LINQ to Entities 中看到了如何做到这一点的答案。 这里这里
但我需要先用代码来完成。

我将查询写入 DbSet<>。

有没有办法做到这一点?请帮忙 :)

4

1 回答 1

1

新答案:我可以找到信息的唯一方法是使用自定义查询。例如:

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]
于 2013-06-12T17:18:26.063 回答