我有一个名为crepes的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'接受第一个参数的定义......
答案 0 :(得分:12)
鉴于crepes是List<Foo>
,您需要为linq查询添加一个额外的级别。
var item = crepes.Where(a => a.item.Any(x => x.doritos == "coolRanch")).FirstOrDefault();
答案 1 :(得分:3)
您的item
access modifier为private
(这是class
的C#默认值),应该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
答案 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
。