![](/img/trans.png)
[英]performance issue with System.Linq when subdividing a list into multiple lists
[英]System.Linq to String issue with GET request
為什么這樣做:
private void button18_Click(object sender, EventArgs e)
{
string uri1 = "http://localhost:8000/Service/GetMessage/{anything}";
string tagUri = uri1.Replace("{anything}", textBox21.Text);
XDocument xDoc = XDocument.Load(tagUri);
var MessageID = xDoc.Descendants("Message")
.Select(n => new
{
MessageID = n.Element("MessageID").Value,
})
.ToString();
textBox1.Text = MessageID;
我得到這個非常奇怪的輸出?
System.Linq.Enumerable+WhereSelectEnumerableIterator`2[System.Xml.Linq.XElement,<>f__AnonymousType7`1[System.String]]
但是當我將ToString更改為ToList並使用時:
dataGridView10.DataSource = MessageID;
它顯示正確嗎? 真的很難找到一種方法來將傳入的GET請求轉換為字符串嗎?
您的LINQ查詢本質上是對.Descendants
的調用的.Descendants
。 如果只有一個,你可以使用.Single()
或.First()
或.FirstOrDefault()
來獲得在列表中唯一的(或第一個)項目。
那會是
textbox1.Text = MessageID.MessageID;
盡管您更可能想執行以下操作:
var MessageId = xDoc.Element("Message").Element("MessageID").Value;
但是我有點猜測,因為我不知道您XML的格式或內容。
這里還有其他人可以給您更詳細的解釋,但這就是我認為正在發生的事情(根據我上面的評論進行了擴展)。
默認情況下,即使只有一個結果,LINQ查詢也會返回一個集合。 在該集合上調用.ToString()
時,將獲得Object類型的完全限定名稱。 請參閱Object.ToString方法 -在這種情況下,我認為這是您得到的怪異輸出。
您可能正在尋找單個結果(MessageID),因此可以使用.FirstOrDefault()
而不是.ToString()
,如下所示:
var MessageID = xDoc.Descendants("Message")
.Select(n => new
{
MessageID = n.Element("MessageID").Value,
})
.FirstOrDefault();
請注意, n.Element("MessageID").Value
將返回一個字符串,然后您可以將其分配給TextBox。
當您將查詢轉換為列表時,可以將其綁定到DataGridView的DataSource,因為DataSource會采用實現IList
接口之一的對象(對於通用列表, IList
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.