以下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