我有以下代码重复:
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
答案 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是一个非常深刻的解释,比我的英语更好。