根据ID从列表中查找项目

时间:2013-11-13 04:22:30

标签: c# linq lambda

我有这个班级

public class item
{
        public int itemID { get; set; }
        public int itemValue { get; set; }
}

我有一个变量

public List<item> itemList;

我正在尝试使用lambda在itemList中搜索并找到itemID = i的项目。 通常,没有lamda的函数如下:

public item FindItem(int i)
{
foreach (var t in itemList)
{
  if (t.itemID==i)
    return t;
}
return null;
}

我尝试用这个lambda替换它

item Item = itemList.Where(x=>x.itemID==i).Select(x=>x);

我收到错误说:

Error   1 Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<item>' to 'item'. An explicit conversion exists (are you missing a cast?)

我该如何纠正?我还在学习lambda,Linq

1 个答案:

答案 0 :(得分:6)

如果您没有找到任何项目,则返回null,请使用下一个代码作为等效代码:

public item FindItem(int i)
{
    return itemList.FirstOrDefault(item => item.itemId == i);
}

FirstOrDefault被描述为Returns the first element of a sequence, or a default value if the sequence contains no elements.msdn)。

item类型是一个类,因此默认值为null

您在Select子句之后使用Where,这基本上是过滤后的投影。它采用类型A的序列并返回类型B的序列。您需要折叠序列,换句话说,找到一个符合某些条件的项目。 LINQ中有很多折叠查询(FirstSingleMaxLastAggregate等等,它们都返回一项从类型A的序列中键入AFirstOrDefault似乎很适合您当前的C#实现。