LINQ to SQL Эквивалент ISDATE () в T-SQL и приведении? - PullRequest
1 голос
/ 03 марта 2009

Кто-нибудь знает эквивалент ISDATE () в синтаксисе запросов LINQ to SQL? У меня есть поле varchar в SQL, которое содержит даты, и мне нужно отфильтровать строки без даты.

надеялся на что-то вроде этого:

var query = SomeDataContext;
    query = from p in query
    where p.ISDATE(field1) == true;
    select p;

также, как можно привести что-то для SQL в синтаксисе Linq?

CAST(SomeDate AS SMALLDATETIME)

Ответы [ 3 ]

3 голосов
/ 03 марта 2009

Хитрость для этого заключается в создании пользовательской функции в базе данных, которая просто вызывает ISDATE, поскольку возвращает значение

  CREATE FUNCTION My_ISDATE(@maybeDate varchar(max))
  returns bit
  as return ISDATE(@maybeDate);

Затем добавьте My_IsDate в контекст базы данных и используйте его в своем запросе:

var db = SomeDataContext;
var query = from p in db.MyTable
where db.My_ISDATE(p.field1)
select p;
2 голосов
/ 03 марта 2009

Я не думаю, что есть метод расширения, который сопоставляется с ISDATE при использовании LINQ to SQL.

Если вы согласны загрузить все данные и затем выполнить фильтрацию в клиентском пространстве, используйте TryParse в поле и сравните с датой.

В противном случае я бы создал хранимую процедуру, которая возвращала бы нужные вам данные (чтобы вы могли использовать ISDATE), а затем выполняла их через контекст.

Кроме того, ваш синтаксис для использования ISDATE неверен. ISDATE просто сообщает вам, является ли выражение допустимым форматом даты. Ваш запрос будет выглядеть так:

var query = SomeDataContext;
    query = from p in query
    where ISDATE(field1) != 0 && CONVERT(datetime, field1) > some date
    select p;

Синтаксис недопустим, но дает представление о том, как сформировать запрос.

0 голосов
/ 03 марта 2009

Похоже, вы можете сделать это. Ссылки:

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

это может помочь, но я не смотрел это:

http://mtaulty.com/videos/nuggets/l2s/15_mt_l2s_callingsqlfunctions.wmv

Полный список здесь:

http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2007/05/10/9322.aspx

...