Linq to XML +链表达式

时间:2014-08-18 16:21:35

标签: linq c#-4.0

我有以下代码重复:

var ccaNumber = (from r in xDoc.Elements("ResultSet").Elements("DataRow")
         where Convert.ToInt32(r.Element("PaymentPlanNumber").Value) == payPlan.OrderNumber

理想情况下,我想将上面的内容创建为表达式,然后将my子句添加到它的末尾。

所以,我创建了如下表达式:

Expression currExp = from r in xDoc.Elements("ResultSet").Elements("DataRow")
where Convert.ToInt32(r.Element("PaymentPlanNumber").Value) == payPlan.OrderNumber;

我现在想要将它们结合起来:

 var ccaNumber = (currExp  select r.Element("CreditCardAuthorityNumber").Value).FirstOrDefault();

但是我现在收到以下错误:

无效的表达式术语')'

有什么建议吗?

TA

yogi

2 个答案:

答案 0 :(得分:0)

添加到现有表达式时,需要使用lambda语法,而不是Linq语法:。

尝试:

 var ccaNumber = (currExp
                  .Select(r=>r.Element("CreditCardAuthorityNumber").Value))
                  .FirstOrDefault();

答案 1 :(得分:0)

我认为你在这里混合了一些东西。

你能做的是:

var items = from r in xDoc.Elements("ResultSet").Elements("DataRow")
            where Convert.ToInt32(r.Element("PaymentPlanNumber").Value) == payPlan.OrderNumber 
            select r;

这将项目声明为与Where-Condition匹配的可枚举元素。

然后您可以使用这样定义的项目:

var ccaNumber = items.Select(item=>item.Element("CreditCardAuthorityNumber").Value).FirstOrDefault();

但是,这都是利用延迟评估,你需要在这里处理多个枚举。 Here是一个非常深刻的解释,比我的英语更好。