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

时间:2015-12-30 15:43:15

标签: c# linq

我有一个名为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会抛出错误。 “列表不包含'item'的定义,也没有'item'接受第一个参数的定义......

3 个答案:

答案 0 :(得分:12)

鉴于crepes是List<Foo>,您需要为linq查询添加一个额外的级别。

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

答案 1 :(得分:3)

您的item access modifierprivate(这是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

答案 2 :(得分: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"));

在这里,我们正尝试在[{1}} Foo中获得第一个Bar至少有一个Items