2016-05-31 88 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! 

目录相关信息目录。我建议你修改你的代码,以便这些集合是规范目录名称的集合。