写这个lambda表达式的更好方法是什么?

时间:2013-10-29 18:15:20

标签: c# linq lambda

我正在尝试编写一个lambda表达式来查看对象数组('fields'),这些对象可能包含也可能没有特定的项目。我想检索它们存在的值;如果数组中没有字段的代码为“SomeCode”,则没有值可以检索。我很好奇是否有更简洁的方法来编写下面的内容,因为我需要在很多字段中执行此操作并且想要完成两次“FirstOrDefault”调用。

if (fields.FirstOrDefault(x => x.Code == "SomeCode") != null) 
{
    obj.CodeValue = fields.FirstOrDefault(x => x.Code == "SomeCode").Value;
}

编辑:感谢您以“仅限Lambda”的方式做到这一点的任何见解;我想提高我在这方面的技能,并认为有一些比调用它更简洁或只是将它分配给临时对象更清洁。

2 个答案:

答案 0 :(得分:5)

只需缓存FirstOrDefault的返回值,然后进行比较。

var item = fields.FirstOrDefault(x => x.Code == "SomeCode");
if (item != null) 
{
    obj.CodeValue = item.Value;
}

在您当前的代码中,您要查询两次,一次检查null,稍后查询值。

答案 1 :(得分:2)

试试这个:

var field = fields.FirstOrDefault(x => x.Code == "SomeCode");

if (field != null) 
    obj.CodeValue = field.Value;