我正在尝试根据以下内容返回对象集合:
我有三个公共课
ObjectA
ObjectB
ObjectC
C
是B
的孩子,B
是A
的孩子。
我需要获取ObjectC
的集合,当它们作为B
和A
对象的一部分存在时。
这是我到目前为止所做的:
#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
类型)。
ObjectB
和ObjectC
没有设置自己的DAO,只能通过ObjectA
获取。此时我似乎无法单独收集ObjectB
......
我希望这是有道理的。我还是比较新的,所以请保持温柔。任何帮助将不胜感激。
答案 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