Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有嵌套Order By的Linq查询?_C#_Linq - Fatal编程技术网

C# 具有嵌套Order By的Linq查询?

C# 具有嵌套Order By的Linq查询?,c#,linq,C#,Linq,大家好,我的班级结构如下: 苹果类 { 公共IEnumerable香蕉{get;set;} } 香蕉班 { 公共IEnumerable胡萝卜{get;set;} } 等级胡萝卜 { public DateTime DateCreated{get;set;} 公共IEnumerable狗{get;set;} } 班犬 { 公共字符串目标{get;set;} } 我正在尝试查询Apple类型集合中的所有内容,其中Apple.Bananas.Carrots.Dogs.Target与我的输入匹配。我现

大家好,我的班级结构如下:

苹果类 { 公共IEnumerable香蕉{get;set;} } 香蕉班 { 公共IEnumerable胡萝卜{get;set;} } 等级胡萝卜 { public DateTime DateCreated{get;set;} 公共IEnumerable狗{get;set;} } 班犬 { 公共字符串目标{get;set;} } 我正在尝试查询Apple类型集合中的所有内容,其中Apple.Bananas.Carrots.Dogs.Target与我的输入匹配。我现在有

var result=Apples.Where(apple=>
苹果、香蕉、任何(香蕉=>
香蕉。胡萝卜。任意(carrort=>carrort.Dogs.Any(dog=>
dog.Target.Equals(输入‘‘‘)’);
我的困难是我现在意识到我只想要胡萝卜列表中的最新条目

我还没有弄清楚如何在这个查询中按DateCreated降序和take first排序胡萝卜

我尝试了以下操作,但出现了抛出和异常:

var result=Apples.Where(apple=>
苹果、香蕉、任何(香蕉=>
香蕉。胡萝卜。OrderByDescending(胡萝卜=>
carrot.DateCreated).First().Dogs.Any(dog=>
dog.Target.Equals(输入));

异常
类型为“Antlr.Runtime.noviablealException”的异常

如果您不确定您的LINQ查询,无论如何,您应该简化它。请记住,LINQ将继续返回IEnumerable,直到您请求一个对象(首先是ToArray、ToList等)。因此,以简单和调试的名义简化代码并没有坏处

var ohGodMyEyes = Apples
   .Where(apple => apple.Bananas
       .Any(banana => banana.Carrots
           .OrderByDescending(carrot => carrot.DateCreated)));

var result = ohGodMyEyes
    .First().Dogs
    .Any(dog => dog.Target.Equals(input));

不管这个Antlr异常是什么,它(几乎可以肯定)与您的linq查询无关。(那是多余的。我会把这些分成几个步骤。)如果你只想要最新的胡萝卜,那不是意味着在所有胡萝卜中你只想要一个,只有一个香蕉有胡萝卜,只有一个苹果有香蕉,所以你希望结果是一个苹果吗?正如其他评论所指出的,例外情况并非来自您向我们展示的任何代码。您最好的选择是生成一个小的、清晰的、完整的程序,我们可以运行它。通过制作这样一个程序,你要么会发现你的问题,要么会制作一个小到足以让其他人理解问题的程序。这个问题几乎肯定与LINQ无关。