使用 lambda 语法在 LinqPad 中查询 XML 源
Query XML source in LinqPad using lambda syntax
考虑到存储在文件 xmlData.xml 中的以下 XML 数据,我正在尝试使用 LinqPad 使用 lambda 语法查询它。
我记得以前用过这个,但想不起来了。我可以使用属性查询数据,就好像我在 Visual Studio.
中查询对象一样
<?xml version="1.0"?>
<ArrayOfHROps_User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HROps_User>
<EntityKey>
<EntitySetName>HROps_User</EntitySetName>
<EntityContainerName>HROperationsEntities</EntityContainerName>
<EntityKeyValues>
<EntityKeyMember>
<Key>UserID</Key>
<Value xsi:type="xsd:int">44405</Value>
</EntityKeyMember>
</EntityKeyValues>
</EntityKey>
<UserID>44405</UserID>
<EmployeeID>AAA40</EmployeeID>
<Period>2015-06-17T00:00:00</Period>
<Active>true</Active>
<Options>false</Options>
<Pager>false</Pager>
<Contractor>false</Contractor>
<TimeStamp>2015-06-18T13:37:38.3</TimeStamp>
<UserName>Mark.Walsh</UserName>
</HROps_User>
<HROps_User>
<EntityKey>
<EntitySetName>HROps_User</EntitySetName>
<EntityContainerName>HROperationsEntities</EntityContainerName>
<EntityKeyValues>
<EntityKeyMember>
<Key>UserID</Key>
<Value xsi:type="xsd:int">44406</Value>
</EntityKeyMember>
</EntityKeyValues>
</EntityKey>
<UserID>44406</UserID>
<EmployeeID>AAA60</EmployeeID>
<Period>2015-06-17T00:00:00</Period>
<Active>true</Active>
<Options>false</Options>
<Pager>false</Pager>
<Contractor>false</Contractor>
<TimeStamp>2015-06-18T13:37:38.94</TimeStamp>
<UserName>Mark.Walsh</UserName>
</HROps_User>
在 LinqPad 中 - 这些语句加载数据并正确输出:
var myxml = XElement.Load (@"c:\temp\xmlData.xml");
myxml.Elements().Dump();
我希望以下内容也能起作用:
myxml.Elements().FirstOrDefault(x=>x.UserName == "Mark.Walsh").Dump();
但它给了我错误:
'System.Xml.Linq.XElement' does not contain a definition for 'UserName' and no extension method 'UserName' accepting a first argument of type 'System.Xml.Linq.XElement' could be found (press F4 to add a using directive or assembly reference)
同样,我记得以前有一个非常干净的语法,但我无法弄清楚它到底是怎么回事。
谢谢!
可能您的意思是使用 Element()
方法将元素名称作为参数传递:
myxml.Elements()
.FirstOrDefault(x => (string)x.Element("UserName") == "Mark.Walsh")
.Dump();
最后我不得不:
- 序列化我的对象列表
- 将其保存到 .xml 文件
- 将我的 class 定义复制到 LinqPad
- 载入 XML 文件
- 将其反序列化为 class 类型
然后像在 VS 中一样使用 lambda 表达式遍历列表。
有点迂回的方式,但它允许我查询最接近 VS 语法的结果。
考虑到存储在文件 xmlData.xml 中的以下 XML 数据,我正在尝试使用 LinqPad 使用 lambda 语法查询它。
我记得以前用过这个,但想不起来了。我可以使用属性查询数据,就好像我在 Visual Studio.
中查询对象一样 <?xml version="1.0"?>
<ArrayOfHROps_User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<HROps_User>
<EntityKey>
<EntitySetName>HROps_User</EntitySetName>
<EntityContainerName>HROperationsEntities</EntityContainerName>
<EntityKeyValues>
<EntityKeyMember>
<Key>UserID</Key>
<Value xsi:type="xsd:int">44405</Value>
</EntityKeyMember>
</EntityKeyValues>
</EntityKey>
<UserID>44405</UserID>
<EmployeeID>AAA40</EmployeeID>
<Period>2015-06-17T00:00:00</Period>
<Active>true</Active>
<Options>false</Options>
<Pager>false</Pager>
<Contractor>false</Contractor>
<TimeStamp>2015-06-18T13:37:38.3</TimeStamp>
<UserName>Mark.Walsh</UserName>
</HROps_User>
<HROps_User>
<EntityKey>
<EntitySetName>HROps_User</EntitySetName>
<EntityContainerName>HROperationsEntities</EntityContainerName>
<EntityKeyValues>
<EntityKeyMember>
<Key>UserID</Key>
<Value xsi:type="xsd:int">44406</Value>
</EntityKeyMember>
</EntityKeyValues>
</EntityKey>
<UserID>44406</UserID>
<EmployeeID>AAA60</EmployeeID>
<Period>2015-06-17T00:00:00</Period>
<Active>true</Active>
<Options>false</Options>
<Pager>false</Pager>
<Contractor>false</Contractor>
<TimeStamp>2015-06-18T13:37:38.94</TimeStamp>
<UserName>Mark.Walsh</UserName>
</HROps_User>
在 LinqPad 中 - 这些语句加载数据并正确输出:
var myxml = XElement.Load (@"c:\temp\xmlData.xml");
myxml.Elements().Dump();
我希望以下内容也能起作用:
myxml.Elements().FirstOrDefault(x=>x.UserName == "Mark.Walsh").Dump();
但它给了我错误:
'System.Xml.Linq.XElement' does not contain a definition for 'UserName' and no extension method 'UserName' accepting a first argument of type 'System.Xml.Linq.XElement' could be found (press F4 to add a using directive or assembly reference)
同样,我记得以前有一个非常干净的语法,但我无法弄清楚它到底是怎么回事。 谢谢!
可能您的意思是使用 Element()
方法将元素名称作为参数传递:
myxml.Elements()
.FirstOrDefault(x => (string)x.Element("UserName") == "Mark.Walsh")
.Dump();
最后我不得不:
- 序列化我的对象列表
- 将其保存到 .xml 文件
- 将我的 class 定义复制到 LinqPad
- 载入 XML 文件
- 将其反序列化为 class 类型
然后像在 VS 中一样使用 lambda 表达式遍历列表。 有点迂回的方式,但它允许我查询最接近 VS 语法的结果。