![](/img/trans.png)
[英]Linq to NHibernate return entities whose name starts with contents of string list
[英]List<string> get item that starts with Name= using LINQ
我如何從List<string>
檢索以Name=
開頭的項目(值)
如果列表包含值:
Name=Jhon Smith
Age=20
Location=CityName
我想獲得Jhon Smith
的價值。
我確實知道如何使用foreach遍歷整個列表,並且如果value以Name=
...開頭,則有一個條件,但是使用LINQ效果不好。
如果集合中沒有此類元素,則將引發異常。 您可以使用FirstOrDefault
並檢查是否獲得null或元素以檢查是否存在匹配項。
list.First(x => x.StartsWith("Name=")).Substring(5)
這不會引發異常:
var prefix = "Name=";
var elem = list.FirstOrDefault(item => item.StartsWith(prefix));
if (elem != null) {
return elem.Substring(prefix.Length)
} else {
return null;
}
像這樣使用Single
或SingleOrDefault
:
var result = list.Single(s => s.StartsWith("Name=")).Substring(5);
要么
string result = string.Empty;
var element = list.SingleOrDefault(s => s.StartsWith("Name="));
if (element == null)
{
//"Name=" not present, throw an exception
}
result = element.Substring(5);
或類似地與First
或FirstOrDefault
一起使用,具體取決於您的實際需求。
用戶canon給出了另一個有趣的答案,但被刪除了(我不知道為什么):
var result = list
.Where(x => x.StartsWith("Name="))
.Select(x => x.Substring(5))
.FirstOrDefault();
它的優點是無論輸入數據如何都不會拋出。
String match = list.FirstOrDefault( str => str.IndexOf("Name=", StringComparison.InvariantCulture) > -1 );
return match.Substring("Name=".Length);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.