Linq查询包含对象列表的对象列表

本文关键字:对象 列表 包含 查询 Linq | 更新日期: 2023-09-27 18:28:33

我有一个名为crepes的foo列表。我想返回foo,其中bar.doritos == "coolRanch"

class foo
{
    List<bar> item;
    string candy;
    string beer;
}
class bar
{
    string doritos;
    string usb;
}
var item = crepes.item.Where(x => x.doritos == "coolRanch").FirstOrDefault();

我已经从其他线程中拼凑出了上面的linq查询,但crepes.item抛出了一个错误。"列表不包含'item'的定义,也不包含接受第一个参数的'item'定义…

Linq查询包含对象列表的对象列表

假设crepes是List<Foo>,则需要向linq查询添加一个附加级别。

var item = crepes.Where(a => a.item.Any(x => x.doritos == "coolRanch")).FirstOrDefault();

您的item访问修饰符是private(这是class的C#默认值),它应该是public

这也适用于您的doritos

此外,由于您的crepesList,请添加一层LINQ(其他人也建议这样做)来完全修复它,比如这个

var item = crepes.Where(f => f.item.Any(b => b.doritos == "coolRanch")).FirstOrDefault(); //f is of foo type, b is of bar type

如果你像这个一样修复你的类

class Foo
{
    public List<Bar> Items { get; set; }
    public string Candy { get; set; }
    public string Beer { get; set; }
}
class Bar
{
    public string Doritos { get; set; }
    public string Usb { get; set; }
}

您的查询将看起来像

var crepes = new List<Foo>();
var item = crepes.FirstOrDefault(f => f.Items.Any(b => b.Doritos == "coolRanch"));

这里,我们试图得到第一个Foo,它在Items中至少有一个Bar,其中Doritos == "coolRanch"