返回过滤的结果集合

时间:2013-07-08 15:34:16

标签: c# linq list lambda

我正在尝试根据以下内容返回对象集合:

我有三个公共课

  • ObjectA

  • ObjectB

  • ObjectC

CB的孩子,BA的孩子。

我需要获取ObjectC的集合,当它们作为BA对象的一部分存在时。

这是我到目前为止所做的:

#region setup

private ObjectADao objectADao;

public void Init()
{
    objectADao = new ObjectA();
    objectADao.SqlMapper = SqlMapper;
    objectADao.AfterPropertiesSet();
}

#endregion

 ICollection<ObjectA> objectACollection = objectADao.FindAll(1000);
 var objectAwithObjectB= objectACollection.Where
 (p => p.objectB != null && p.objectB.Count > 0);
//ICollection<ObjectB> = objectAwithObjectB....

此时我有一个objectAwithObjectB类型的集合(Object),但前提是它们包含ObjectB

那是我被困住了。我现在需要从ObjectB类型的上述集合中获取A类型的集合。 (所以我最终可以使用C类型)。

ObjectBObjectC没有设置自己的DAO,只能通过ObjectA获取。此时我似乎无法单独收集ObjectB ......

我希望这是有道理的。我还是比较新的,所以请保持温柔。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ选择对象的属性。您将它们投影到不同的集合,在本例中,从A到B到C。见下文。

IEnumerable<ObjectB> projectionToCollectionOfObjectB = objectAwithObjectB.Select(x => x.ObjectB);

IEnumerable<ObjectC> projectionToCollectionOfObjectC = projectionToCollectionOfObjectB.Select(x => x.ObjectC);

答案 1 :(得分:0)

尝试以下

objectACollection
.Where(p => p.objectB != null && p.objectB.Count > 0)
.SelectMany(objA => objA.ObjectB)

这会给你一个扁平的IEnumerable