列表<a> containing List<b> containing List<c></c></b></a>

时间:2011-11-03 11:49:50

标签: c# .net linq linq-to-objects

我的结构类似于以下。

class A    
{    
    string title;    
    List<B> bItem;    
}

class B    
{    
    int price;    
    List<C> cItem;    
}

class C    
{    
    int quantity;    
}

List<A>包含大约200,000个“A”个实例;

现在对象“A”是这样的,它包含一个“B”列表,而对象“B”包含一个“C”列表;我也有List<A>的多个实例。现在我想找到一个列表中有“B”的所有“A”,所有“B”都有这样的“C”,其中包含quantity > 500;

我面临的问题是为LINQ指定目标。

如果我使用listA[0].listB[6].listC,那么它将我的搜索限制为仅提到的目标,但我想搜索整个对象“listA”。


Thanx回复。因为我正在使用分层对象,所以我不能通过指定a.bitem或c.quality直接访问数据。所以为了接近c.quality,我必须做一个aList [index] .bList [index] .cList [index] .quantity。根据我的知识,我不能直接指定a.bList或c.quantity或a.bItem。

在LINQ查询中,我们提供了一个目标体或基本容器数据来查询,并将目标作为“aList [index] .bList [index] .cList [index] .quantity”限制我的搜索容器。

我想在整个aList对象中搜索所有数量实例。

如果使用LINQ to DataSet,那么我们在一个表中有完整的“C”对象,因此我们可以查询所有c.quantity而不管它们的父级。如何在LINQ中对similer进行反对。

谢谢,

穆罕默德

3 个答案:

答案 0 :(得分:4)

如上所述,您的问题尚不清楚,但您正在寻找可能

var query = listA.Where(a => a.bItem
                              .All(b => b.cItem.All(c => c.quantity > 500)));

换句话说,对于每个A检查,所有B符合(B中的所有C都具有大于500的数量)。

答案 1 :(得分:1)

IEnumerable<A> list = new List<A>(...); // assuming

var a500 = from a in list
           from b in a.bItem
           from c in b.cItem
           where c.quantity > 500
           select a;

答案 2 :(得分:1)

认为这就是你想要的:

 var result = aCol.where(a => a.bItem.Any(b => b.cItem.Any(c => c.quantity > 500)));