2009-05-23 4 views
0

Следующий код Linq2Sql вызывает у меня много головной боли, и я надеялся, что кто-то может помочьПопытка получить максимальную дату из таблицы с помощью Linq2Sql

DateTime _maxRecordedDate = (from snapshot in _ctx.Usage_Snapshots 
             where snapshot.server_id == server_id 
             orderby snapshot.reported_on descending 
             select snapshot.reported_on).First().Value; 

Этот код работает в LINQPad и компилирует нормально, но при запуске проекта есть а «Указанный метод является неподдерживаемый»

Если я не использую значение или бросить его я получаю следующее сообщение об ошибке:.

**

Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)

**

+0

После долгих поисков я смог найти, что проблема связана с использованием служб данных ADO.NET. По-видимому, они используют ограниченное подмножество Linq, и в настоящее время невозможно использовать такие методы, как Max, First и т. Д. Bummmer – jdiaz

ответ

1
DateTime? _maxRecordedDate = _ctx.Usage_Snapshots.Where(s => s.server_id == server_id).Max(d => d.reported_on); 
+0

По той же ошибке, что и для First() Невозможно неявно преобразовать тип 'System.DateTime?' to 'System.DateTime'. Явное преобразование существует (вы пропускаете листинг?) – jdiaz

+0

Да, возвращаемый тип DateTime? (Nullable ), просто назначьте его правильному типу соответствия. –

1

Не хочет ли это First(). Value? Может быть, просто First().

Я ищу this.

+0

, используя только First(), вызывает DateTime? ! = Ошибка DateTime. – jdiaz

+0

Да, или назначьте его DateTime? переменной или использовать var _maxRecordedDate. –

0

Роберт предоставил лучший способ сделать это, но проблема с вашим кодом является то, что вы вызываете .Value и что будет работать в контексте SQL Server, поэтому нет .Value операции, которая может быть переведен на SQL. Вам нужно будет вызвать .ToList(). First(). Значение или назначить DateTime ?. Так как вы не можете вызвать .First(). ToList() ... поскольку First() возвращает одно значение DateTime? то вам лучше назначить DateTime ?, потому что вы не хотите возвращать весь список из SQL.

+0

возвращает «Указанный метод не поддерживается». Кажется, что все, что добавлено в конец выбора, вызывает ошибку. – jdiaz

0

После долгих поисков я смог найти, что проблема связана с использованием служб данных ADO.NET. По-видимому, они используют ограниченное подмножество Linq, и в настоящее время невозможно использовать такие методы, как Max, First и т. Д. Bummme

+1

Вы не упомянули службы данных ADO.NET в своем вопросе. Это не имеет ничего общего с вашим сообщением об ошибке. Просто позвоните .ToList(). First(). –

Смежные вопросы