EF Code First - 在查询中将字符串转换为int

时间:2013-06-12 07:49:14

标签: entity-framework type-conversion code-first

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

我将查询写入DbSet<>。

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

1 个答案:

答案 0 :(得分: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,即使它们未在select中使用。

旧答案: 关于在sql端转换为字符串: 如果先将int转换为double或decimal,则可以使用SqlFunctions.StringConvert Problem with converting int to string in Linq to entities

from user in Users
select new
{
    IdAsText = SqlClient.SqlFunctions.StringConvert((decimal)user.Id)
}

转换为float或decimal是必要的,因为sql-server上的STR函数需要一个浮点数:Why is there no int overload for SqlFunctions.StringConvert

更新

在LINQPad中,上面生成的SQL查询出现在:

SELECT 
[Extent1].[Id] AS [Id], 
STR( CAST( [Extent1].[Id] AS decimal(19,0))) AS [C1]
FROM [dbo].[Users] AS [Extent1]