Попытка получить максимальную дату из таблицы, используя Linq2Sql - PullRequest
0 голосов
/ 24 мая 2009

Следующий код 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 и прекрасно компилируется, но при запуске проекта появляется «Указанный метод не поддерживается».

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

**

Невозможно неявно преобразовать тип "System.DateTime? в 'System.DateTime. Явный конверсия существует (вам не хватает отливать?)

**

Ответы [ 4 ]

1 голос
/ 24 мая 2009
DateTime? _maxRecordedDate = _ctx.Usage_Snapshots.Where(s => s.server_id == server_id).Max(d => d.reported_on);
1 голос
/ 24 мая 2009

Не хочет First (). Значение? Может быть, просто Первый ().

Я смотрю на это .

0 голосов
/ 24 мая 2009

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

0 голосов
/ 24 мая 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...