linq C#问题没有得到预期的输出

时间:2016-05-31 19:23:14

标签: c# linq

有人可以告诉我为什么这不会返回任何东西吗?它是错误的var temp =部分:我没有得到任何东西。 LINQ部分:我做错了吗?

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

2 个答案:

答案 0 :(得分: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!

目录 infos 不是目录。我建议您修改代码,以便集合是规范目录名称的集合。

答案 1 :(得分:0)

首先,您似乎在void方法中使用此代码。您应该重新设计方法以返回空DirectoryInfo列表。但是,在检查目录的循环中放置return语句似乎不正确。

其次,您使用了两种不同的Linq方法,当您拨打OrderBy()时,您并未将其分配给任何内容。

所以,最后。您的查询应该看起来像这样。但是,我会首先尝试重新设计该方法。请注意,我使用的是路径的全名。因为这样您可以比较对象的值而不是实例。

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