Supporto a “.ToString()” e “String.Concat()”, un esempio:
var queryConcat = from c in db.Vehicles
where string.Concat(c.EngineSize, c.HP).Equals("1600110")
select c;
var queryToString = from c in db.Vehicles
where c.HP.ToString().Equals("110")
select c;
Abbiamo due Query LINQ che filtrano i dati in base a condizioni su stringhe, la prima “tira fuori” tutti i veicoli dove la concatenazione dei valori delle proprietà “EngineSize” e “HP” è uguale a “1600110”, mentre la seconda esegue un filtro su di un valore intero convertio in stringa. Se proviamo ad eseguire il codice in un ambiente con EF 6.0 otteniamo un’eccezione a runtime in tutti e due i casi:
Con EF 6.1 le query sono eseguite correttamente:
Cosa succede dietro le quinte:
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [DomusDotNet].[Vehicles] AS [Extent1]
WHERE N'1600110' = (CASE WHEN ([Extent1].[EngineSize] IS NULL) THEN N'' ELSE [Extent1].[EngineSize] END + CAST( [Extent1].[HP] AS nvarchar(max)))
) AS [GroupBy1]
SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [DomusDotNet].[Vehicles] AS [Extent1]
WHERE N'110' = CAST( [Extent1].[HP] AS nvarchar(max))
) AS [GroupBy1]
Da analizzare il funzionamento di “String.Concat(…)” con SQL Server 2012 per verificare la conversione in SQL con la funzione “nativa SQL” “Concat”.