这一切都始于存储过程数据结果(普通结构):
IdGrandad,GrandadName,IdDad,DadName,IdChild,ChildName
响应应该是嵌套实体列表。
我将数据输入 SqlDataReader ...然后,这里是循环:
var grandadList = new List<Grandad>();
while (reader.Read())
{
// Properties setters.
Grandad grandadItem = BindGrandad(reader);
Dad dadItem = BindDad(reader);
Child childItem = BindChild(reader);
// Entities finders.
Func<Grandad, bool> foundGrandad = (item => item.Identity.Equals(grandadItem.Identity));
Func<Dad, bool> foundDad = (item => item.Identity.Equals(dadItem.Identity));
if (!grandadList.Any(foundGrandad))
grandadList.Add(grandadItem);
// Here comes the horror-code...
if (!grandadList.Where(foundGrandad).SelectMany(item => item.DadList).ToList().Any(foundDad))
grandadList.SingleOrDefault(foundGrandad)?
.DadList.Add(dadItem);
grandadList.SingleOrDefault(foundGrandad)?
.DadList.SingleOrDefault(foundDad)?
.ChildList.Add(childItem);
}
我怎么能简化循环代码?
提前致谢!
答案 0 :(得分:0)
哦,小伙子,根本没有答案!。
好吧,我刚刚找到了一个“更好”的解决方案......
首先应创建一个普通对象,然后让 .GroupBy()执行 欺骗!
稍后再读。