System.Linq to String issue with GET request
本文关键字:with GET request issue String Linq to System | 更新日期: 2023-09-27 18:31:48
为什么我这样做:
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
调用的性质获取集合。 如果只有一个,则可以使用.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
将返回一个字符串,然后可以将其分配给文本框。
将查询转换为列表时,可以将其绑定到 DataGridView 的数据源,因为 DataSource 采用实现IList
接口之一的对象(在泛型列表的情况下IList
)。