我的一个数据库表有很多记录,其中包含以字符串形式存储的xml数据的列。检索此数据并解析字符串以获取我希望绑定到UI的特定信息的最佳方法是什么。目前我这样做 -
我的Customer表的数据列将xml数据存储为字符串
List<string> myData = new List<string>();
//populate the list with the data from the customer table
List<XElement> myXmlData = new List<XElement>();
foreach (var item in myData)
{
XElement xmlItem = XElement.Parse(item);
myXmlData.Add(xmlItem);
}
this.DataContext = myXmlData;
然后我使用数据模板使用以下
绑定到我需要的xml数据<TextBlock Text="{Binding Path=Element[Name].Value}"/>
这可以正常工作,但我不确定这是否是正确的做事方式。性能是一个问题因此,以任何其他方式这样做可以提高性能吗?
答案 0 :(得分:2)
你说性能是关注 - 你有没有测量过它?这是问题吗?这应该是你的第一道攻击线。
就代码而言 - 我更彻底地使用LINQ:
List<XElement> myXmlData = myData.Select(XElement.Parse).ToList();
this.DataContext = myXmlData;
如果方法组转换不起作用(规则很微妙,我现在无法轻易测试),您可以使用lambda表达式:
List<XElement> myXmlData = myData.Select(x => XElement.Parse(x)).ToList();
this.DataContext = myXmlData;
请注意,如果您的“填充列表”涉及LINQ,您很可能一次完成所有事情 - 例如
this.DataContext = dbContext.Customers
.Select(c => c.CustomerXml)
.AsEnumerable() // Out of LINQ to SQL or whatever
.Select(XElement.Parse)
.ToList();
答案 1 :(得分:0)
根据您需要从XML数据中获取的特定信息(从您的问题中不清楚XML是否实际存储为字符串或者您的目标是什么?),您是否考虑将其反序列化为对象然后从那里提取相关数据?
XSD是一款出色的.NET工具,可以通过自动为您创建类来提供帮助。 http://www.cricketmx.com/articles/read/using-xsd-to-assist-in-xml-deserialisation-to-objects-in-c-sharp/
有一些信息