如何在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>()
这工作像魅力。