嗨,我有以下类结构:
class Apple
{
public IEnumerable<Banana> Bananas { get; set; }
}
class Banana
{
public IEnumerable<Carrot> Carrots { get; set; }
}
class Carrot
{
public DateTime DateCreated { get; set; }
public IEnumerable<Dog> Dogs { get; set; }
}
class Dog
{
public string Target { get; set; }
}
我正在尝试从Apple类型的集合中查询所有内容,其中Apples.Bananas.Carrots.Dogs.Target与我的输入匹配。我目前有。
var result = Apples.Where(apple =>
apple.Bananas.Any(banana =>
banana.Carrots.Any(carrort => carrort.Dogs.Any(dog =>
dog.Target.Equals(input)))));
我的困难是我现在意识到我只想要胡萝卜列表中的最新条目。
我无法弄清楚如何按DateCreated降序订购胡萝卜并在此查询中排在第一位。
我尝试了以下方法,但引发了异常:
var result = Apples.Where(apple =>
apple.Bananas.Any(banana =>
banana.Carrots.OrderByDescending(carrot =>
carrot.DateCreated).First().Dogs.Any(dog =>
dog.Target.Equals(input))));
异常Exception of type 'Antlr.Runtime.NoViableAltException
答案 0 :(得分:0)
如果您不确定自己的LINQ查询,请务必对其进行简化。记住,LINQ将继续返回IEnumerable,直到您请求一个对象(First,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));