[英]LINQ return type/value is not what im awaiting
當我執行這些行
drpdf["meno"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => c.Groups["meno"].Value);
drpdf["info"] = matches.Cast<Match>().Where(c => c.Groups["ID"].Value == i.ToString()).Select(c => Regex.Replace(c.Groups["zvysok"].Value, @"^,\s?", string.Empty));
它不會保存到我想要的DataRow值中,而不是
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Text.RegularExpressions.Match,System.String]
您能幫我如何選擇/將返回值轉換為可讀類型嗎? 不管怎么說,還是要謝謝你。 翁德羅
您的LINQ查詢使用Select
,因此返回IEnumerable<T>
。 如果您想要LINQ查詢的結果,並且正好期望一個結果,請添加.Single()
:
drpdf["meno"] = matches.Cast<Match>()
.Where(c => c.Groups["ID"].Value == i.ToString())
.Select(c => c.Groups["meno"].Value)
.Single();
另一方面,如果查詢可以有多個結果,則應使用.First()
代替以獲取第一個結果。 然而,到那時,這取決於您的情況以及您要捕獲的內容。
就像是:
matches.Cast<Match>()
.Where(c => c.Groups["ID"].Value == i.ToString())
.Select(c => c.Groups["meno"].Value)
.FirstOrDefault(); // this expression will evaluate the linq
// expression, so you get the string you want
請注意:如果null在您的上下文中實際上是有效值,則僅應使用FirstOrDefault或SingleOrDefault。 (就像@Daniel Hilgarth所說的那樣)。
如果null
不是有效結果,而是需要一個空字符串,請附加?? String.Empty
表達式的?? String.Empty
:
matches
...
.FirstOrDefault() ?? String.Empty;
查詢的結果是可枚舉的對象。 正如您已經注意到的那樣,在這些方法上調用ToString()
不會給您有意義的字符串表示形式。 您需要生成一個適合顯示的字符串。
如果只想將內容顯示為逗號分隔的列表,則可以使用String.Join()
來執行此操作:
var menos = matches.Cast<Match>()
.Where(c => c.Groups["ID"].Value == i.ToString())
.Select(c => c.Groups["meno"].Value);
drpdf["meno"] = String.Join(", ", menos);
否則,如果要選擇單個結果,請使用Single()
選擇該單個字符串結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.