Избегайте повторения выражения в запросе LINQ to Entities - PullRequest
0 голосов
/ 06 августа 2011

У меня следующий запрос:

val = val.Select(item => new SimpleBill { CTime = item.CTime, Description = item.Description, ID = item.ID,
      IDAccount = item.IDAccount, OrderNumber = item.OrderNumber, PSM = item.PSM, Sum = item.Sum,
      Type = (BillType)item.Type,
      ByteStatus = ((Bill)item).Payments.OrderByDescending(payment => payment.ID).FirstOrDefault().Status,
      LastPaymentDate = ((Bill)item).Payments.OrderByDescending(payment => payment.ID).FirstOrDefault().CTime,
      LastPaymentSum = ((Bill)item).Payments.OrderByDescending(payment => payment.ID).FirstOrDefault().Sum });
      }

Можно ли избежать повторения части ((Bill)item).Payments.OrderByDescending(payment => payment.ID).FirstOrDefault() 3 раза? Я попытался превратить его в метод и делегат - код скомпилирован в обоих случаях, но во время выполнения выдает исключение.

1 Ответ

1 голос
/ 06 августа 2011

Вы можете использовать конструкцию let следующим образом:

val = from item in val
let lastPayment = ((Bill)item).Payments
   .OrderByDescending(payment => payment.ID)
   .FirstOrDefault()
select new SimpleBill
{
    lastPayment.CTime,
    //Rest of fields
}

Однако, как вы могли заметить, здесь используется синтаксис LINQ Query против метода. IIRC let доступен только в первом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...