尝试使用Linq2Sql从表中获取最大日期

时间:2009-05-23 22:44:07

标签: c# linq-to-sql

以下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 个答案:

答案 0 :(得分:1)

它不想要First()。价值?也许只是First()。

我在看this

答案 1 :(得分:1)

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

答案 2 :(得分:0)

罗伯特提供了一种更好的方法来实现它,但是代码的问题在于你正在调用.Value并且它将在SQL Server的上下文中运行,因此没有.Value操作可以转换为SQL。你必须调用.ToList()。First()。Value,还是分配给DateTime?。既然你不能调用.First()。ToList()...因为First()返回一个DateTime?那么你最好只分配给DateTime ?,因为你不想从SQL返回整个列表。

答案 3 :(得分:0)

经过多次搜索,我发现问题源于使用ADO.NET数据服务。显然他们使用Linq的有限子集,目前无法使用Max,First等方法.Bummme