5

我确实在 LINQ c# 中编写了以下 SQL 查询

  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();

上面的查询不起作用,因为我不确定如何在 LINQ c# 中使用 Max 和 OR 条件

我可以知道更好的解决方案吗?

4

2 回答 2

11
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);
于 2016-05-12T19:24:57.807 回答
3

您可以使用||运算符来组合您的两个条件,或者您可以使用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来选择最大值。

于 2016-05-12T19:26:45.837 回答