2015-12-30 30 views
5

Tôi có một danh sách các foo được gọi là crepes. Tôi muốn quay trở lại foo nơi bar.doritos == "coolRanch"Truy vấn LINQ Danh sách các đối tượng có chứa danh sách đối tượng

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

Từ bài khác, tôi đã chắp ghép các truy vấn LINQ trên, nhưng crepes.item ném một lỗi. "Danh sách không chứa một định nghĩa cho 'mục' và không có định nghĩa cho 'mục' chấp nhận đối số đầu tiên ...

+1

Các trường trong 'C#' là * riêng tư theo mặc định *. Thay đổi khai báo của bạn thành 'public List item;' – Rob

+0

cả lớp và giá trị đều được công khai. Vẫn nhận được lỗi, linq của tôi có đúng không? – Chris

Trả lời

11

Cho rằng bánh crepes là List<Foo>, bạn cần thêm mức bổ sung vào truy vấn LINQ.

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

bạn itemaccess modifierprivate (đây là C# mặc định cho class), cần được thực hiện public

này đi cho doritos quá

bạn

Ngoài ra, vì bạn crepes là một List, đặt thêm lớp LINQ (cũng như đề nghị của người khác) để hoàn toàn sửa chữa nó, một cái gì đó giống như

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

cả lớp và giá đỡ đều được công khai. Vẫn nhận được lỗi, linq của tôi có đúng không? – Chris

+0

@Chris Hiện nó đang tạo ra lỗi gì? Tôi nghĩ bạn cũng nên thay đổi 'doritos' – Ian

2

Nếu bạn sửa chữa lớp học của bạn như

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

truy vấn của bạn sẽ trông giống như

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

Ở đây, chúng tôi đang cố gắng để có được những Foo đầu tiên trong đó có ít nhất một Bar trong Items nơi Doritos == "coolRanch".

Các vấn đề liên quan