返回筛选后的结果集合
本文关键字:结果 集合 筛选 返回 | 更新日期: 2023-09-27 18:21:42
我正试图返回基于以下内容的对象集合:
我有三个公开课
-
ObjectA
-
ObjectB
-
ObjectC
C
是B
的子级,而B
是A
的子级。
当它们作为B
和A
对象的一部分存在时,我需要获得ObjectC
的集合。
这就是我目前所拥有的:
#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....
此时,我有一个Object
A类型的集合(objectAwithObjectB
),但前提是它们上包含ObjectB
。
那就是我陷入困境的原因。我现在需要从上面的A
类型集合中获得一个ObjectB
类型集合。(所以我最终可以使用C
类型)。
ObjectB
和ObjectC
没有设置自己的DAO,只能通过ObjectA
获得。在这一点上,我似乎无法获得单独的ObjectB
集合。。。
我希望这是有道理的。我还是个新手,所以请温柔一点。如有任何帮助,我们将不胜感激。
您可以使用LINQ来选择对象的属性。您可以将它们投影到不同的集合中,在本例中,从A到B再到C。参见下文。
IEnumerable<ObjectB> projectionToCollectionOfObjectB = objectAwithObjectB.Select(x => x.ObjectB);
IEnumerable<ObjectC> projectionToCollectionOfObjectC = projectionToCollectionOfObjectB.Select(x => x.ObjectC);
尝试以下
objectACollection
.Where(p => p.objectB != null && p.objectB.Count > 0)
.SelectMany(objA => objA.ObjectB)
这将为您提供平坦的IEnumerable