这里我有一个简单的例子来查找字符串列表中的项目 . 通常我使用for循环或匿名委托来这样做:
int GetItemIndex(string search)
{
int found = -1;
if ( _list != null )
{
foreach (string item in _list) // _list is an instance of List<string>
{
found++;
if ( string.Equals(search, item) )
{
break;
}
}
/* use anonymous delegate
string foundItem = _list.Find( delegate(string item) {
found++;
return string.Equals(search, item);
});
*/
}
return found;
}
LINQ对我来说是新的 . 我很好奇我是否可以使用LINQ来查找列表中的项目?怎么可能?
12 回答
有几种方法(注意这不是一个完整的清单) .
1)Single将返回单个结果,但如果找不到或多于一个(可能是或不是你想要的),将抛出异常:
注意
SingleOrDefault()
的行为相同,除了它将为引用类型返回null,或者为值类型返回默认值,而不是抛出异常 .2)Where将返回符合您条件的所有项目,因此您可以使用一个元素获得IEnumerable:
3)First将返回符合您条件的第一项:
注意
FirstOrDefault()
的行为相同,除了它将为引用类型返回null,或者为值类型返回默认值,而不是抛出异常 .如果你想要元素的索引,这将做到:
你不能在第一关中摆脱lambda .
请注意,如果该项目不存在,则会抛出此值 . 这通过诉诸可空的int来解决问题:
如果你想要这个项目:
如果要计算匹配的项目数:
如果您想要匹配的所有项目:
并且不要忘记在任何这些情况下检查
null
的列表 .或者使用
(list ?? Enumerable.Empty<string>())
而不是list
.感谢Pavel帮助评论 .
如果它真的是
List<string>
你不需要LINQ,只需使用:如果您正在寻找物品本身,请尝试:
您想要列表中的项目还是实际项目本身(将假定项目本身) .
以下是一些选项:
这种方法更简单,更安全
bool insertOrderNew = lOrders.Find(r => r == "1234") == null ? true : false
IndexOf怎么样?
例如
请注意,如果列表中未出现该值,则返回-1
我曾经使用过一个字典,这是一种索引列表,它可以在我需要时给出我想要的内容 .
例如,每当我想访问我的边距值时,我都会查询我的字典:
因此,根据您正在做的事情,字典可能很有用 .
以下是重写方法以使用LINQ的一种方法:
因此,用它来调用它
GetItemIndex("two")
将返回1
,和
GetItemIndex("notthere")
将返回-1
.参考:linqsamples.com
试试这段代码:
如果我们需要从列表中找到一个元素,那么我们可以使用
Find
和FindAll
扩展方法,但它们之间存在细微差别 . 这是一个例子 .这将帮助您获取Linq列表搜索中的第一个或默认值
此搜索将找到它将返回的第一个或默认值 .
You want to search an object in object list.
这将帮助您获取Linq列表搜索中的第一个或默认值 .
要么