簡體   English   中英

System.Linq到GET請求的字符串問題

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

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