2013-12-12 4 views
0

저는 LINQ와 Lambda 식과 같은 C#의 고급 기능을 배우려고 노력했기 때문에 LINQ와 Lambda 식에 관해서는 완전히 초보자입니다.
내 문제는 내 컴퓨터에 포함 된 파일의 경로 목록을 갖고 있으며 "마지막 액세스 시간"에 따라 정렬하려고합니다. 이를 위해 나는 다음다음 LINQ 쿼리에 어떤 문제가 있습니까?

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

FilesList는 다양한 계층에서 파일의 경로가 포함 썼다. FilesListlist<string> 이고 TempListIEnumerable<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.

누군가 내 쿼리에 어떤 문제가 있는지 지적하십시오 수 있습니다. 오류 메시지를 이해할 수 없습니다. 내가 가지고 있지 않는

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

내가 구문을 약속 할 수는 완전히 올바른 :

답변

1

우선 FilesListList<string> 일 때 FileInfo 매개 변수를 가져올 방법이 없습니다. 너는 단지 문자열을 얻는다. 게다가, 당신은 당신의 람다로부터 아무것도 돌려주지 않습니다. 그리고 람다 매개 변수를 재 할당 할 수도 없습니다.

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

또는 당신이 여러 줄 람다를 확인하기 위해 람다 내 {}을 사용하려는 경우, 당신은 (마지막 문장 등 대부분) 코드의 어딘가에 return 뭔가가 있습니다

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

이 대신 시도하십시오 ("파일"의 가정 목록은 실제로 완전한 파일 이름의 목록입니다) 실행 파일 목록. 또한 각 파일에 대해 FileInfo 개체를 인스턴스화하는 것보다 효율적인 방법이있을 수 있습니다.

+0

+1 답변 주셔서 감사합니다 @ 그랜트 Winney –

+0

행운을 빌어 요! LINQ는 훌륭합니다. 나는 지금 어떻게 그것없이 일할 수 있을지 모른다. –

관련 문제