如何应用使用lambda表达式在动态列表中选择多个

时间:2016-08-11 20:45:04

标签: c# lambda

我有以下代码:

int count = 0;
foreach (var c in result)
{
    response.AllChecklist[0].obj.Name = c.Name;
    response.AllChecklist[0].obj.Category = c.Category;
    response.AllChecklist[0].obj.Code = c.Code;
    response.AllChecklist[0].obj.chk[count].Name = c.Name;
    response.AllChecklist[0].obj.chk[count].Type = c.Type;
    response.AllChecklist[0].obj.chk[count].chktatusCode = c.chktatusCode;
    response.AllChecklist[0].obj.chk[count].chktatusReasonCode = c.chktatusReasonCode;
    count++;
}

我想应用lambda表达式。我知道我应该申请选择很多,因为它有两个不同的类 作为代码审查的一部分,我的主管建议我使用SelectMany将此循环更改为lambda表达式。我是lambda表达的新手。任何帮助非常感谢?

1 个答案:

答案 0 :(得分:1)

假设您可以为response.AllChecklist[0].obj创建一个新对象(我不知道以前的代码是做什么的),我们假设response.AllChecklist[0].obj的类型是TObj,类型为{{1是TObj.chk,然后您可以将其重构为:

TChk

但正如我所说,假设var lastResultItem = result.Last(); response.AllChecklist[0].obj = new TObj{ lastResultItem.Name, lastResultItem.Category, lastResultItem.Code, chk = result.Select(r => new TChk{ r.Name, r.Type, r.chktatusCode, r.chktatusReasonCode }).ToList() }); 在原始代码之前没有任何有效数据,因此您可以在不丢失任何数据的情况下重新创建它。

另一个假设是,分配到response.AllChecklist[0].objTObj.NameTObj.Category属性后没有任何其他副作用,然后设置属性值(在原始循环中重复分配给单个对象)来自结果集合元素的属性值,因此在完成循环之后,属性值最终会得到TObj.Code的最后一个元素的相应属性值。