Как мне преобразовать это выражение в LINQ?
Можно ли преобразовать это выражение в LINQ?
TermsOfPayment termsOfPayment = null;
foreach (CustomerGroup group in _customer.CustomerGroups)
if (termsOfPayment == null) termsOfPayment = group.TermsOfPayment;
else if (group.TermsOfPayment != null)
if (group.TermsOfPayment.InvoiceDueDays < termsOfPayment.InvoiceDueDays)
termsOfPayment = group.TermsOfPayment;
Это может показаться глупым вопросом, так как выражение, приведенное выше, решает вопрос, но я использую некоторые выражения LINQ и хочу больше узнать - отсюда и причина этого поста.
По сути, я просто хочу выбрать объект TermsOfPayment с минимальным значением InvoiceDueDays (integer) из групп, в которые входит клиент.
3 ответа
Решение
termsOfPayment = (
from g in _customer.CustomerGroups
where g.TermsOfPayment != null
orderby g.TermsOfPayment.InvoiceDueDays
select g.TermsOfPayment
).FirstOrDefault();
var termsOfPayment =
_customer.CustomerGroups.OrderBy(cg=>cg.TermsOfPayment.InvoiceDueDays)
.First().Select(cg=>cg.TermsOfPayment);
Почему бы не использовать агрегат, скорость тоже лучше:
var termsOfPayment =
_customer.CustomerGroups.Aggregate((a, n) => n.TermsOfPayment.InvoiceDueDays < a.TermsOfPayment.InvoiceDueDays ? n : a).TermsOfPayment;