以下LINQ查询读取分隔文件并返回每个recordId的最近记录。问题是,最新的记录并不总是被返回。我究竟做错了什么?我需要更改哪些内容以确保始终返回最近的日期?有没有比使用.Max()更好的方法?为什么这个LINQ查询不能返回正确的日期?
我还附加了一些示例数据,以便您可以看到问题。查看示例数据时,标有星号(*)的行是我想返回的行(最近的日期)。标有X的行在我看来是错误的返回。
在多次出现相同的recordId(例如#162337)并且有多个日期的情况下,我希望返回一个带有最近日期的记录。
var recipients = File.ReadAllLines(path)
.Select (record => record.Split('|'))
.Select (tokens => new
{
FirstName = tokens[2],
LastName = tokens[4],
recordId = Convert.ToInt32(tokens[13]),
date = Convert.ToDateTime(tokens[17])
}
)
.GroupBy (m => m.recordId)
.OrderByDescending (m => m.Max (x => x.date))
.Select (m => m.First())
.OrderBy (m => m.recordId)
.Dump();
FirstName LastName recordId date
fname lname 137308 2/15/1991 0:00
fname lname 138011 6/16/1983 0:00 *
fname lname 138011 11/9/1981 0:00 x
fname lname 158680 9/4/1986 0:00
fname lname 161775 4/23/1991 0:00
fname lname 162337 12/1/1998 0:00 *
fname lname 162337 12/1/1998 0:00 *
fname lname 162337 9/1/1994 0:00 x
fname lname 162337 9/1/1994 0:00 x
fname lname 163254 2/12/1969 0:00
fname lname 173816 9/26/1997 0:00
fname lname 178063 1/16/1980 0:00 *
fname lname 178063 3/3/1976 0:00 x
fname lname 180725 7/1/2007 0:00 *
fname lname 180725 1/14/1992 0:00 x
fname lname 181153 5/1/2001 0:00
是的,就是这样。该行使用每个组的最大日期对组进行排序。那么,现在我该如何解决它? – DenaliHardtail 2011-03-16 15:07:14
到目前为止,在有限的测试中,您的“盲刺”正在产生预期值。非常感谢你! – DenaliHardtail 2011-03-16 15:17:58
非常欢迎 - 很高兴它工作 – 2011-03-16 15:19:31