![](/img/trans.png)
[英]C# LINQ: 'variable 'x' of type referenced from scope '', but it is not defined'
[英]LINQ error: variable 'x' of type 'y' referenced from scope '', but it is not defined
我遇到了這個錯誤......
類型為'Xrm.sb_directdebitpaymentline'的變量'paymentLine'從范圍''引用,但未定義
...當我嘗試在以下代碼后執行'paymentLines.ToList()'時:
var payments = from payment in Crm.sb_directdebitpayments
where payment.statuscode == 1
&& Crm.sb_directdebitmandates.Any(mandate =>
mandate.sb_directdebitmandateid ==
payment.sb_directdebitmandateid &&
mandate.statuscode == 1)
select payment;
var paymentLines = from paymentLine in Crm.sb_directdebitpaymentlines
where paymentLine.sb_paymentsent == isSent
&& paymentLine.statuscode == status
&& payments.Any(payment =>
payment.sb_directdebitpaymentid ==
paymentLine.sb_directdebitpaymentid &&
payment.statuscode == 1)
select paymentLine;
如果有人對如何解決這個問題有任何想法,我將非常感激!
它是查詢語法和擴展方法(Any)的奇妙組合。
它看起來像是捕獲循環變量問題的變體。 paymentLines
執行是延遲的,因此在執行payments.Any( )
時捕獲的paymentLine
行有什么價值?
嘗試將其重寫為Join。
我以前嘗試過把它寫成一個連接,但是失敗了。 但是我今天重新審視並弄清楚我做錯了什么; 它與where子句的順序有關(事實上我需要一段時間才能解決,我甚至需要多個where子句!)。 謝謝你的所有答案。 解決方案是:
var paymentLines = from paymentLine in Crm.sb_directdebitpaymentlines
join payment in Crm.sb_directdebitpayments on paymentLine.sb_directdebitpaymentid equals payment.sb_directdebitpaymentid
join mandate in Crm.sb_directdebitmandates on payment.sb_directdebitmandateid equals mandate.sb_directdebitmandateid
where mandate.statuscode == 1
where payment.statuscode == 1
where paymentLine.sb_paymentsent == isSent && paymentLine.statuscode == status
select paymentLine;
我相信你不能在Select
之前調用Any()
Any()
返回一個boolean
值。 我會把你在Any()
所有代碼都放在Where
,然后在foreach
子句之前檢查Any()
。
if (paymentLines.Any())
{
foreach (var n in paymentLines)
{
//Do work
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.