2016-05-31 89 views
-2

有人可以告訴我爲什麼這不會返回任何東西?這是錯誤的var temp =部分:我沒有得到任何東西。 LINQ部分:我做錯了嗎?LINQ C#問題沒有得到預期的輸出

var temp = list.Select(x => x.Parent.Name == dir.Name).ToList();

+7

''爲什麼這不會返回任何東西'' - 好吧,'return'語句是空的。 「catch」塊也是如此,所以它基本上忽略了任何和所有的錯誤。 – David

+1

您正試圖比較'DirectoryInfo'對象,就好像它們是'整數'一樣。 –

+4

Your OrderBy構造一個排序查詢,然後丟棄它。這段代碼有很多錯誤。問爲什麼它不起作用是一個不起作用;沒有理由爲什麼它應該工作。 –

回答

0

首先,看起來您在void方法中使用此代碼。您應該重新設計方法以返回空列表DirectoryInfo。但是,在檢查目錄的循環中放入return語句似乎不正確。

其次,您正在使用兩種不同的Linq方法,並且當您調用OrderBy()時,您不會將它分配給任何東西。

因此,最後。你的查詢應該看起來像這樣。但是,我會嘗試首先重新設計方法。請注意,我正在使用路徑的全名。因爲這樣比較對象的值而不是實例。

var temp = list.FirstOrDefault(i => i.Parent.FullName.Equals(dir.FullName)) 
       .OrderBy(i => i.Name); 
2

我發現它真的很難理解這段代碼隔離,但我認爲你試圖表達的邏輯是:

var q = from dir in parent 
     where IsMainBranch(dir) 
     where parents.Contains(dir) 
     join sdir in list on dir equals sdir.Parent 
     orderby sdir.Name 
     select sdir; 
list2.AddRange(q); 
return list2; 

是嗎?如果是這樣,那麼可以將代碼編寫爲一堆嵌套循環,即作爲查詢,但不是都在同一時間

注意你不能平等比較的DirectoryInfo:

var a = new DirectoryInfo("c:\\"); 
    var b = new DirectoryInfo("c:\\"); 
    Console.WriteLine(a == b); // False! 

目錄相關信息目錄。我建議你修改你的代碼,以便這些集合是規範目錄名稱的集合。