2016-05-31 15 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

OrderByは注文クエリを作成してそれを破棄します。このコードには多くの間違いがあります。それがうまくいかない理由を尋ねることは、初心者ではない。それが*働かなければならない理由はありません。 –

答えて

0

まず、voidの方法でこのコードを使用しているようです。空のDirectoryInfoリストを返すようにメソッドを再設計する必要があります。しかし、ディレクトリをチェックしているループ内にreturnステートメントを置くことは正しくないようです。

第2に、異なる2種類の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! 

ディレクトリに関する情報ディレクトリではありません。コレクションが正規のディレクトリ名のコレクションであるようにコードを変更することをお勧めします。

関連する問題