2013-12-12 72 views
0

我一直在嘗試深入探索C#的更多高級特性,比如LINQ和Lambda表達式,所以我在LINQ和Lambda表達式方面是一個完整的初學者。
我的問題是,我有我的電腦上包含的文件的路徑列表,並希望根據「上次訪問時間」對它們進行排序。要做到這一點,我寫了下面的以下LINQ查詢有什麼問題?

TempList = FilesList.OrderByDescending((FileInfo Files,string n) => { Files = new FileInfo(n) ; 
                       Files.LastAccessTime ; } ) ; 

FilesList包含各種順序文件的路徑。 FilesList類型list<string>TempList的類型是IEnumerable<string>

爲了這個查詢編譯器生成以下錯誤:

The type arguments for method 'System.Linq.Enumerable.OrderByDescending<TSource,TKey>(System.Collections.Generic.IEnumerable<TSource>, System.Func<TSource,TKey>)' cannot be inferred from the usage. Try specifying the type arguments explicitly.

可有人請指出什麼是錯我的查詢。我無法從錯誤消息中理解。

回答

1

首先,當FilesListList<string>時,沒有辦法獲得FileInfo參數。你只是得到字符串。此外,你不會從你的lambda返回任何東西。而且你也不能重新分配lambda參數。

TempList = FilesList.OrderByDescending(n => new FileInfo(n).LastAccessTime); 

或者,如果你想使用{}您的拉姆達內,使其多行拉姆達,你必須return一些地方的代碼(最有可能是最後一條語句):

TempList = FilesList.OrderByDescending(n => { var file = new FileInfo(n); return file.LastAccessTime }); 
2

試試這個(假設你的「文件」列表實際上是完全合格的文件名列表):

TempList = FilesList.OrderByDescending(n => new FileInfo(n).LastAccessTime).ToList(); 

我不能保證語法是完全正確的,因爲我沒有運行它的文件列表。此外,可能比爲每個文件實例化一個對象更高效的方法。

+0

+1感謝您的回答@Grant Winney –

+0

祝您好運! LINQ很棒。我不知道現在沒有它我該如何工作。 –