Использование условия OR в LINQ C#

Я пишу следующий запрос SQL в LINQ C#

  SELECT max(creation_date) from TRS where approval_status='APPROVED' and transaction_type in ('Sale','PRE') 

Я попытался построить запрос ниже в списке следующим образом

var session = txns.Where(a => a.transaction_type.Equals("SALE"))
                     .Where(a => a.transaction_type.Equals("PRE"))
                     .Where(a => a.approval_status.Equals("APPROVED"))
                     .OrderByDescending(a => a.creation_date).Select(a => a.creation_date).FirstOrDefault();

Приведенный выше запрос не работал, так как я не был уверен, как использовать условия Max и OR в LINQ C#

Могу ли я узнать лучшее решение?

2 ответа

Решение
var session = txns
  .Where(a => a.transaction_type.Equals("SALE") || a.transaction_type.Equals("PRE"))
  .Where(a => a.approval_status.Equals("APPROVED"))
  .Select(a=>a.creation_date).Max();

или же

var txtypes=new[]{"SALE","PRE"};
var session = txns
  .Where(a => txtypes.Contains(a.transaction_type))
  .Where(a => a.approval_status.Equals("APPROVED"))
  .Select(a=>a.creation_date).Max();

или же

var session = txns
  .Where(a => a.transaction_type.Equals("SALE") || a.transaction_type.Equals("PRE"))
  .Where(a => a.approval_status.Equals("APPROVED"))
  .Max(a=>a.creation_date);

Ты можешь использовать || оператор, чтобы объединить ваши два условия или вы можете использовать Contains который будет генерировать запрос как SELECT IN (....)

var transcationTypes = new[] {"SALE", "PRE"};
var sessions = txns.Where(a => transcationTypes.Contains(a.transaction_type)
                               && a.approval_status == "APPROVED")
    .Select(a => a.creation_date)
    .Max();

После того как вы отфильтровали результаты, которые вы можете использовать Max выбрать максимальное значение.

Другие вопросы по тегам