У меня есть два класса сущностей:
public class Invoice
{
public int ID { get; set;}
public int Amount { get { return InvoiceLines.Sum(il => il.Amount); }}
public EntitySet<InvoiceLines> InvoiceLines {get;set;};
}
public class InvoiceLine
{
public Invoice Invoice {get;set;}
public int InvoiceID {get;set;}
public int Amount {get;set;}
public string SomeHugeString {get;set;}
}
(Реальные классы генерируются sqlmetal, я сократил их здесь, чтобы добраться до сути).
Запрос для всех сумм:
var amounts = from i in invoice select i.Amount;
Это приведет к отложенной загрузке всех счетов-фактур с одним вызовом базы данных на счет-фактуру.Я могу решить эту проблему с помощью параметров загрузки данных, но это приведет к тому, что будут прочитаны все объекты InvoiceLine, включая SomeHugeString
.
Повтор вычисления суммы в запросе даст хороший перевод SQL:
var amounts = from i in invoice select i.InvoiceLines.Sum(il => il.Amount);
Мне бы хотелось, чтобы linq-to-sql каким-то образом получал часть дерева выражений из функции / свойства.Есть ли способ переписать Invoice.Amount
, чтобы запрос первой суммы дал тот же перевод SQL, что и второй?