如何在LINQ中只selectdate最高的logging

我有一张桌子,上面有跟踪字段。

Id, AccountId, Version, DownloadNo, Date 

数据如下所示:

 28092|15240000|1.0.7.1782|2009040004731|2009-01-20 13:10:22.000 28094|61615000|1.0.7.1782|2009040007696|2009-01-20 13:11:38.000 28095|95317000|1.0.7.1782|2009040007695|2009-01-20 13:10:18.000 28101|15240000|1.0.7.1782|2009040004740|2009-01-20 14:10:22.000 28103|61615000|1.0.7.1782|2009040007690|2009-01-20 14:11:38.000 28104|95317000|1.0.7.1782|2009040007710|2009-01-20 14:10:18.000 

我怎样才能在LINQ to SQL中获得每个AccountId的最后一个跟踪(最高的date)?

如果你只是想每个帐户的最后date,你会使用这个:

 var q = from n in table group n by n.AccountId into g select new {AccountId = g.Key, Date = g.Max(t=>t.Date)}; 

如果你想要整个logging:

 var q = from n in table group n by n.AccountId into g select g.OrderByDescending(t=>t.Date).FirstOrDefault(); 

这是一个简单的方法来做到这一点

 var lastPlayerControlCommand = this.ObjectContext.PlayerControlCommands .Where(c => c.PlayerID == player.ID) .OrderByDescending(t=>t.CreationTime) .FirstOrDefault(); 

也看看这个很棒的LINQ地方 – LINQ to SQL Samples

如果你想要整个logging,这里是一个lambda方法:

 var q = _context .lasttraces .GroupBy(s => s.AccountId) .Select(s => s.OrderByDescending(x => x.Date).FirstOrDefault()); 

它可能是这样的:

 var qry = from t in db.Lasttraces group t by t.AccountId into g orderby t.Date select new { g.AccountId, Date = g.Max(e => e.Date) }; 

去一个简单的方法来做到这一点:

创build了一个类来保存以下信息

  • 级别(数量)
  • url(该网站的url)

转到存储在ArrayList对象上的站点列表。 并执行以下查询按Level降序sorting。

 var query = from MyClass object in objCollection orderby object.Level descending select object 

一旦我得到按降序排列的集合,我写了下面的代码来获得作为第一行的对象

 MyClass topObject = query.FirstRow<MyClass>() 

这工作像魅力。