Я нажимал на этот вопрос дюжину раз и наконец нашел ответ на него. @neo ответила здесь.
Мой пример SQL раньше:
SELECT *
FROM [tblRoom]
WHERE [Building] = <%= bldgdbid %>
AND [Floor] LIKE CAST('<%= flr %>' AS NVARCHAR(127))
ORDER BY CAST([RoomName] AS NVARCHAR(255))
который я превратил в этот запрос LINQ:
(From zz In tblRooms
Where zz.Building = bldgdbid
Select zz
).Where(Function(x) Convert.ToString(x.Floor).ToLower() = flr.ToLower()
).OrderBy(Function(y) Convert.ToString(y.RoomName))
, который генерирует LINQPad:
SELECT [t0].[DBID], [t0].[Building], [t0].[ID], [t0].[Floor], [t0].[RoomName]
WHERE (LOWER(CONVERT(NVarChar(MAX),[t0].[Floor])) = @p0) AND ([t0].[Building] = @p1)
ORDER BY CONVERT(NVarChar(MAX),[t0].[RoomName])
поэтому он использует CONVERT
, а не CAST
, но для меня этого достаточно! И это должно быть достаточно для вас, потому что CAST
- это ANSI, а CONVERT
- это специфический для SQL Server, но более мощный.
Это чертовски неаккуратно, но я перехожу на Entity Framework, и все LINQ проще.