2013-06-12 102 views
2

我需要在我的查詢中將String轉換爲Int32值。它必須在sql服務器端完成,而不是在內存中完成。
我已經看到了答案如何在模型優先方法LINQ to Entities中做到這一點。 herehere
但我需要它與Code First一起完成。EF Code First - 在查詢中將字符串轉換爲int

我向DbSet <>寫入查詢。

有沒有辦法做到這一點?請幫助:)

回答

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 
} 

在我的測試中,它似乎對你映射到必須列入即使您選擇不包括每個屬性的自定義對象選擇的實體屬性的每一個值。在我上面的例子中,我包括名字和姓氏,即使他們沒有在選擇中使用。

老答案: 關於轉換爲字符串在SQL端: 您可以使用SqlFunctions.StringConvert,如果你投你的int雙或小數第一 Problem with converting int to string in Linq to entities

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

演員浮動或十進制是必要的,因爲SQL服務器上的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] 
+0

弗雷德裏克,什麼類型不StringConvert()返回?以及我需要什麼類型。 – Igor

+0

重新閱讀您的問題後,以新答案更新。 –

+0

它不能解決我的問題,但謝謝:) – Igor