Как заставить LINQ выполнять CAST () в SQL Server? - PullRequest
3 голосов
/ 07 октября 2011

У меня есть таблица в SQL Server с записью, которая пришла от:

INSERT INTO table(data) VALUES CAST(getdate() AS BINARY(8))

Я бы хотел выполнить запрос LINQ, который будет выполнять:

SELECT CAST(data AS DATETIME) FROM table

Как мне это сделать?

Дата и время хранятся в двоичном виде (8) в SQL Server по независящим от меня причинам, и мне нужно получить дату и время.

Ответы [ 2 ]

1 голос
/ 07 октября 2011

Вы можете использовать определенную моделью функцию для реализации CAST

http://msdn.microsoft.com/en-us/library/dd456857.aspx

Смотрите здесь аналогичный пример: Преобразовать строку в Int в EF 4.0

0 голосов
/ 09 февраля 2017

У меня была похожая проблема со столбцом sql_variant.

sql_variant не поддерживается в LINQ to SQL / EF, поэтому для получения запроса, сгенерированного с помощью CAST(column as your_desired_type), требуется хитрость, в противном случае LINQ to SQL выдаст исключение Unable to cast object of type 'System.Int32' to type '%your desired type%'.

Итак, сначала определите столбец в вашей модели с типом object (вместо, например, string)

[System.Data.Linq.Mapping.Table]
public class CompanyDimensionValue
{
  // type "object" + private setter because Linq to SQL cannot map sql_variant
  [System.Data.Linq.Mapping.Column]
  public object Code { get; private set; }
}

и, во-вторых, добавьте System.Convert.ToString() к запросу:

from v in table select
  System.Convert.ToString(v.Code) // <- this generates a CAST(... as nvarchar...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...