我有一个大的xml文件,我想排序,但我对如何处理这种情况有点生疏 .
我有一个大约40k行的大xml文件,但是这个xml文件没有我可以用来排序的独特元素 .
是否有可能按2个元素订购?
<Customer>
<row CompanyID="1" Name="John" Email="John@mail.com" \>
<row CompanyID="1" Name="Jane" Email="Jane@mail.com" \>
<row CompanyID="1" Name="Howard" Email="Howard@mail.com" \>
<row CompanyID="2" Name="Jen" Email="Jen@mail.com" \>
<row CompanyID="2" Name="James" Email="James@mail.com" \>
<row CompanyID="3" Name="Phil" Email="Phil@mail.com" \>
<row CompanyID="3" Name="Kenny" \>
<row CompanyID="3" Name="Andrew" Email="Andrew@mail.com" \>
<row CompanyID="3" Name="Greg" Email="Greg@mail.com" \>
<row CompanyID="4" Name="Julia" Email="Julia@mail.com" \>
<row CompanyID="4" Name="Hannah" Email="Hannah@mail.com" \>
<row CompanyID="4" Name="Riley" Email="" \>
<row CompanyID="4" Name="Anders" Email="Anders@mail.com" \>
</Customer>
让我说我首先开始按公司ID订购,即11122333等等......而我也想按电子邮件排序 . (请注意,缺少一封电子邮件)
这是使用CompanyID的第一个数字,然后如果存在则通过电子邮件进行alfabetically .
哪会给我结果(休息只是代表):
<Customer>
<row CompanyID="1" Name="Howard" Email="Howard@mail.com" \>
<row CompanyID="1" Name="Jane" Email="Jane@mail.com" \>
<row CompanyID="1" Name="John" Email="John@mail.com" \>
<row CompanyID="2" Name="Bill" Email="Bill@mail.com" \>
<row CompanyID="2" Name="Jen" Email="Jen@mail.com" \>
<row CompanyID="3" Name="Andrew" Email="Andrew@mail.com" \>
<row CompanyID="3" Name="Greg" Email="Greg@mail.com" \>
<row CompanyID="3" Name="Phil" Email="Phil@mail.com" \>
<row CompanyID="3" Name="Kenny" \>
<row CompanyID="4" Name="Anders" Email="Anders@mail.com" \>
<row CompanyID="4" Name="Hannah" Email="Hannah@mail.com" \>
<row CompanyID="4" Name="Julia" Email="Julia@mail.com" \>
<row CompanyID="4" Name="Riley" Email="" \>
</Customer>
另请注意,一个Email属性完全丢失,另一个只是空 .
现在它只是按“CompanyID”排序,它给了我111223333 ......等等 .
var xml = xDoc.Element("Customer")
.Elements("row")
.OrderBy(s => (int)s.Attribute("CompanyID"));
我需要通过电子邮件排序的原因是,电子邮件在这种情况下是独一无二的,坏的是它们并非在每个记录中都可以这么说 .
谢谢你的帮助 .
1 回答
你需要使用ThenBy扩展方法:
使用条件运算符,您可以使用默认值(例如,"ZZZ")将
Email
属性的元素设置为空,并且在结果的末尾不使用Email
属性 .