我有一个简单的测试表:
Code FromDate Name
---- ---------- -------
001 2012-11-30 bertie
001 2012-12-01 bert
002 2012-12-01 ernie
001 2012-12-02 bert
002 2012-12-02 ernie
001 2012-12-03 ernie
002 2012-12-04 bert
如果我在这个表中搜索,那么我想要具有最新'from date'的代码。
例如,搜索'ernie'应该得到如下结果:'001/2012-12-03/ernie'
搜索'bert'应该会得到如下结果:'002/2012-12-04/bert'
如果我搜索'er',我应该得到两个最新的记录:'001/2012-12-03/ernie'和'002/2012-12-04/bert'
这个查询不工作:
from d in Data
where d.Name.ToUpper().Contains("ERNIE") && d.Code != null
group d by d.Code into g
select g.OrderByDescending(t => t.FromDate).FirstOrDefault()
做这件事的最好方法是什么?
结果还应该为我提供名称,而不需要对每个记录进行sql查询。
更新:
使问题更容易理解
这行得通:
var query = (from d in Data
group d by d.Code into g
select g.OrderByDescending(t => t.FromDate).FirstOrDefault());
query = query.Where(d => d.Name.ToUpper().Contains("BERT") && d.Code != null);
query.Dump();