如何将foreach循环转换为Linq查询?

时间:2013-09-10 15:53:23

标签: c# linq

具有以下结构

[[1,10],[2,20],[5,45],[10,34]]

这个foreach循环找到匹配“planYear”的第一个元素。如果planYear = 5,那么将选择第三个元素值“45”。

List<object> gifts = gifts;
foreach (List<object> item in gifts)
{
  if (item[0] == planYear)
  {
    gift = Convert.ToDouble(item[1]);
    break;
  }
}

实现同样结果的类似Linq声明会是什么?

2 个答案:

答案 0 :(得分:8)

var gift = gifts.Cast<List<object>>()
                .Where(x => x[0] == planYear)
                .Select(x => Convert.ToDouble(x[1]))
                .FirstOrDefault();

如果未找到匹配的条目,gift将为0。如果那不是您想要的,请改用First()。如果不存在匹配项,则会抛出异常。

此答案假设 - 就像您的foreach循环一样 - gifts中的每个项目实际上都是List<object>。如果一个项目的类型不同,则此代码将抛出InvalidCastException。如果这是一个问题,请使用OfType代替Cast

答案 1 :(得分:4)

var gift = Convert.ToDouble(
               gifts.Cast<List<object>>().First(x => x[0] == planYear)[1]);