繁体   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