所以在我试图运行的程序中,我收到两个列表,一个包含字符串格式的id的对象(看起来像" bb_b1203322")和一个带有id&#的列表39; s(在这个地方仅命名为" b1203322"原因未知)以及对实际id的含义的描述。
var forms = await _tRepository.GetAllFormsAsync(lastUpdate);
var formDefinitions = await _deRepository.GetAllFormDefintionsAsync();
foreach (var form in forms)
{
foreach (var def in formDefinitions)
{
if (form.SetupFormName.Contains(def.BLKID))
form.SetupFormName = def.DESCR;
}
}
return forms;
现在这段代码完全符合我的要求,但我宁愿将它作为lambda表达式,因为......原因:)
现在我已尝试了几种不同的东西,但凭借我目前对lambda表达式的了解,我无法让它发挥作用。
答案 0 :(得分:0)
此代码使用一些LINQ来查找定义:
foreach(var form in forms)
{
var def = formDefinitions.FirstOrDefault(x => form.SetupFormName.Contains(x.DESCR));
if(def != null)
form.SetupFormName = def.DESCR
}
正如您所看到的,它并没有真正保存所有代码。
请注意:
正如Jon正确评论的那样,此代码的行为与原始代码略有不同。如果有多个代码使用最后一次出现,则此代码使用第一次出现
如果这实际上是您的代码的用例,请将FirstOrDefault
替换为LastOrDefault
。
扩展上面的代码,你可以这样做:
foreach(var tuple in forms.Select(x => new { Form = x,
Definition =
formDefinitions.FirstOrDefault(y =>
x.SetupFormName.Contains(y.DESCR)) })
.Where(x => x.Definition != null))
{
tuple.Form.SetupFormName = tuple.Definition.DESCR;
}
但正如你所看到的,这很快就会变得混乱。
答案 1 :(得分:0)
试试这段代码。请注意,如果formDefinitions
始终存在合适的DESCR
,则可以使用它。
forms.ForEach(f => f.SetupFormName = formDefinitions.FirstOrDefault(fd =>
f.SetupFormName.Contains(fd.DESCR)).DESCR);