Ошибка LINQ: переменная 'x' типа 'y' ссылается на область действия '', но она не определена - PullRequest
0 голосов
/ 24 февраля 2011

У меня возникает эта ошибка ...

переменная 'paymentLine' типа 'Xrm.sb_directdebitpaymentline' ссылка из области действия ', но она не определена

... когда я пытаюсь выполнить 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;

Если у кого-то есть идеи, как это исправить, я был бы очень признателен!

Ответы [ 3 ]

2 голосов
/ 24 февраля 2011

Это любопытная комбинация синтаксиса запроса и методов расширения (Any).

Выглядит как вариант задачи захвата цикла var .Выполнение paymentLines откладывается, поэтому какое значение имеет захваченная строка paymentLine при выполнении payments.Any( )?

Попробуйте переписать его как соединение.

1 голос
/ 25 февраля 2011

Я пытался написать это как объединение ранее, но с треском провалился. Однако я вернулся сегодня и выяснил, что я сделал неправильно; это было связано с порядком предложений 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;
0 голосов
/ 24 февраля 2011

Я считаю, что вы не можете вызвать Any() до Select, так как Any() возвращает значение boolean. Я бы взял весь код, который у вас есть внутри Any(), и поместил его в Where, а затем проверил наличие Any() перед предложением foreach.

if (paymentLines.Any())
  {
foreach (var n in paymentLines)
         {
           //Do work
         }
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...