簡體   English   中英

LINQ返回類型/值不是我在等待什么

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM