2015-12-30 11 views
5

私はクレープと呼ばれるfooのリストを持っています。私は他のスレッドからbar.doritos == "coolRanch"Linq query aオブジェクトのリストを含むオブジェクトのリスト

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(); 

のfooを返すようにしたい、私は上記のLINQクエリをつなぎ合わせましたが、crepes.itemでエ​​ラーが発生します。 「リスト... 『アイテム』と最初の引数を受け入れる 『アイテム』の定義がありませんの定義が含まれていません

+1

デフォルトでは、C#のフィールドは*プライベートです。あなたの宣言を 'public list item;' – Rob

+0

に変更します。クラスと小道具は共に公開されています。まだエラーが発生している、私のlinq正しいですか? – Chris

答えて

11

クレープがList<Foo>の場合、linqクエリにレベルを追加する必要があります。

あなたはあなたのクエリはここ

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

のようになります。

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; } 
} 

このようなあなたのクラスを修正した場合、我々は中に少なくとも1つのBarを持つ最初のFooを取得しようとしている

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

あなたitemaccess modifierあるprivate、それはpublic

を行うべきである(これは classのためのC#のデフォルトです)

これがあるため、また、あなたの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 
+0

クラスと小道具の両方が公開されています。まだエラーが発生している、私のlinq正しいですか? – Chris

+0

@Chris今はどのようなエラーが生成されますか?私はあなたがあなたの 'doritos 'も変えるべきだと思う – Ian

2

ItemsDoritos == "coolRanch"

関連する問題