0

私がこれを行うのはなぜですか?

    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リクエストを文字列に変換する方法を見つけるのに本当に苦労していますか?

4

2 に答える 2

4

LINQクエリは、への呼び出しの性質上、コレクションを取得しています.Descendants。1つしかない場合は、.Single()またはを使用して、リスト内の唯一の(.First()または.FirstOrDefault()最初の)アイテムを取得できます。

それなら

textbox1.Text = MessageID.MessageID;

あなたはおそらくこのようなことをしたいと思うでしょうが:

var MessageId = xDoc.Element("Message").Element("MessageID").Value;

しかし、あなたのXMLの形式や内容がわからないので、私は多少推測しています。

于 2012-04-19T04:45:03.307 に答える
1

より詳細な説明をすることができる他の人がここにいますが、これが私が起こっていると思うことです(上記の私のコメントから拡張されています)。

デフォルトでは、結果が1つしかない場合でも、LINQクエリはコレクションを返します。そのコレクションを呼び出す.ToString()と、オブジェクトのタイプの完全修飾名が取得されます。Object.ToStringメソッドを参照してください-この場合、私はあなたが得る奇妙な出力であると信じています。

おそらく単一の結果(MessageID)を探しているので、次のよう.FirstOrDefault()にの代わりに使用できます.ToString()

var MessageID = xDoc.Descendants("Message")
                .Select(n => new
                {
                    MessageID = n.Element("MessageID").Value,
                })
                .FirstOrDefault();

文字列が返されることに注意してくださいn.Element("MessageID").Value。この文字列をTextBoxに割り当てることができます。

IListクエリをリストに変換すると、データソースがインターフェイスの1つを実装するオブジェクト(IList汎用リストの場合)を取得するため、データグリッドビューのデータソースにバインドできます。

于 2012-04-19T04:53:08.683 に答える