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