Как мне преобразовать это выражение в 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;
Другие вопросы по тегам