2013-12-12 37 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很棒。我不知道现在没有它我该如何工作。 –