将子项附加到父泛型方法
Posted
技术标签:
【中文标题】将子项附加到父泛型方法【英文标题】:Attach Children to parent generic method 【发布时间】:2011-12-16 16:18:36 【问题描述】:每个父对象都有一个 Id 每个子对象都有一个属性 ParentId,它标识一个唯一的父对象,例如 child.ParentId == parent.Id 每个父对象都有属性 Children
此方法将匹配 parent.Id == child.ParentId 的孩子附加到每个父母 Children 属性
private void AttachChildrenToParent(IEnumerable<dynamic> parents,
IEnumerable<dynamic> children)
parents.GroupJoin(
children,
p => p.Id,
c => c.ParentId,
(p, cn) => new Parent = p, Children = cn )
.ToList().ForEach(x => x.Parent.Children = x.Children);
我的问题:
我实际上没有属性名称为“Parent”“Children”的对象,而是我有各种显示子父关系的属性。所以我需要一个不编码属性名称的通用方法,并且我想为此调用这样的方法。
谁能帮助疲惫的大脑解决这个问题?
【问题讨论】:
【参考方案1】:我假设在调用这个函数时你知道父/子关系属性是什么。
那么我建议你使用委托(实际上是 lambdas)来解决这个问题。这是我将如何做到的。您可能需要修改代码才能使其正常工作(我尚未对其进行测试),但希望它能够帮助您找到解决方案。
public delegate Guid GetProperty<T>(T obj);
public delegate void AttachChildren<TParent, TChild>(TParent parent, IEnumerable<TChild> children);
private void AttachChildrenToParent<TParent, TChild>(IEnumerable<TParent> parents, IEnumerable<TChild> children, GetProperty<TParent> getID,
GetProperty<TChild> getParentID, AttachChildren<TParent, TChild> attachObjects)
parents.GroupJoin(
children,
p => getID(p),
c => getParentID(c),
(p, cn) => new Parent = p, Children = cn )
.ToList().ForEach(x => attachObjects(x.Parent, x.Children));
private class Class1 public Guid ID get; set; public IEnumerable<Class2> Children get; set;
private class Class2 public Guid ID get; set; public Guid ParentID get; set;
private void test()
IEnumerable<Class1> lst1 = new List<Class1>();
IEnumerable<Class2> lst2 = new List<Class2>();
AttachChildrenToParent<Class1, Class2>(lst1, lst2, x => x.ID, x => x.ParentID, (x, y) => x.Children = y);
【讨论】:
以上是关于将子项附加到父泛型方法的主要内容,如果未能解决你的问题,请参考以下文章