LINQ学习笔记:投射到X-DOM
这会去掉空的元素, 也就是那些没有高价值采购单的客户. (如果它是一个本地查询, 而不是LINQ to SQL查询, NullReferenceException异常将会抛出. 在这个例子中, 整个省略lastBigBuy节点会更好. 我们可以通过在条件操作符里面包装一个lastBigBuy的构造器来完成这个目标) 1: select
2: new XElement ("customer", 3: new XAttribute ("id", c.ID), 4: new XElement ("name", c.Name), 5: new XElement ("buys", c.Purchases.Count), 6: lastBigBuy == null ? null : 7: new XElement ("lastBigBuy", 8: new XElement ("description", 9: lastBigBuy.Description),
10: new XElement ("price", lastBigBuy.Price) 对于那些没有lastBigBuy的客户, null将会被发出而不是XElement. 这也是我们所想要的因为null的内容通常都是被忽略的. 流化一个投射 如果你正在通过调用Save来投射一个X-DOM, 你可以使用XStreamingElement来提高内存的效率. XStreamingElement是一个削减过的XElement版本, 对其子内容使用了延迟加载.要使用它, 你可以简单的使用XStreamingElement来替换外围的XElement: 1: var customers =
2: new XStreamingElement ("customers", 3: from c in dataContext.Customers 4: select
5: new XStreamingElement ("customer", 6: new XAttribute ("id", c.ID), 7: new XElement ("name", c.Name), 8: new XElement ("buys", c.Purchases.Count) 9: )
10: );
11: customers.Save ("data.xml"); 这个查询将通过XStreamingElement的构造器并且不会被执行直到你在Element上面调用了Save, ToString或者WriteTo; 这避免了一次将整个X-DOM加载到内存当中. 另外一点是该查询还会自动判别是否是重新Save, 你也不能横贯XStreamingElement的子内容——因为它并没有暴露类似Elements或者Attribute的方法. XStreamingElement是基于XObject的——而不是其他类——因为它有一些有限的成员. 除了Save, ToString和WriteTo之外其他的成员就是:
XStreamingEleme |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |