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

9

我有一个名为crepes的foo列表。我想要返回bar.doritos等于"coolRanch"的foo。

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引发了一个错误。"List does not contain a definition for 'item' and no definition for 'item' accepting first argument..."

该列表不包含“item”定义,并且没有接受第一个参数的“item”定义...

1
C# 中,字段默认为 私有的。将声明更改为 public List<bar> item; - Rob
这个类和属性都是公共的。仍然出现错误,我的 LINQ 语句正确吗? - Chris
3个回答

19

假设 crepes 是 List<Foo>,您需要向 linq 查询中添加一个额外的级别。

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

3

你的item 访问修饰符private(这是C#中class类型的默认值),它应该改为public

同样的,你的doritos也是如此

此外,由于你的crepes是一个List,建议像其他人建议的那样在其上再加一层LINQ,以完全解决问题,可以参考以下示例代码:

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

这个类和属性都是公共的。仍然出现错误,我的linq语句正确吗? - Chris
@Chris 现在它产生了什么错误?我认为你应该也改变你的“doritos”。 - Ian

2
如果你按照以下方式修复你的类
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"));

在这里,我们试图获取第一个具有至少一个BarFoo,其中Items中的Doritos ==“coolRanch”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接