使用 MAX 将 SQL 转换为 LINQ

Converting SQL to LINQ using MAX

我有两张桌子

1) T_EJV_CREDIT_DS_INDEX
2) T_EJV_CREDIT_DS_INDEX_CONTRACT

我想要一个像下面这样的 SQL 查询作为 LINQ 表达式

SELECT MAX(INDEX_FAMILY_VERSION) FROM T_EJV_CREDIT_DS_INDEX cdi
INNER JOIN T_EJV_CREDIT_DS_INDEX_CONTRACT cdic
ON cdic.INDEX_ID = cdi.INDEX_ID
WHERE cdi.INDEX_SHORT_NAME LIKE '%@VARIABLE1%'
AND cdic.TENOR = @VARIABLE2

这是我目前尝试过的

var maxFamilyVersion = (from ic in dsIndexContract
                       join i in dsIndex on i.INDEX_ID equals ic.INDEX_ID
                       where i.INDEX_SHORT_NAME.CONTAINS(strindex) && ic.TENOR equals d.TERM 
                       select new
                       {
                           ic.INDEX_FAMILY_VERSION.Max()     
                       }).Take(1).ToList();

但是上面提到的开始显示语法的编译问题,如下所示

可以使用 == 检查 where 条件是否相等。关键字 equals 仅用于连接条件。

  var result = (from ic in dsIndexContract
                join i in dsIndex on i.INDEX_ID equals ic.INDEX_ID
                where i.INDEX_SHORT_NAME.CONTAINS(strindex) && ic.TENOR == d.TERM 
                select new
                {
                    ic.INDEX_FAMILY_VERSION.Max()     
                }).FirstOrDefault();

而不是 .Take(1).ToList(),您可以使用 .FirstOrDefault() 来检索第一项。

或者更有效的方法是直接使用.Max()而不是.FirstOrDefault()

  var result = (from ic in dsIndexContract
                    join i in dsIndex on i.INDEX_ID equals ic.INDEX_ID
                    where i.INDEX_SHORT_NAME.CONTAINS(strindex) && ic.TENOR == d.TERM 
                    select ic.INDEX_FAMILY_VERSION).Max();

应该这样做:

var maxFamilyVersion = 
                 (from ic in dsIndexContract
                 join i in dsIndex on ic.INDEX_ID equals i.INDEX_ID
                 where i.INDEX_SHORT_NAME.CONTAINS(strindex) && ic.TENOR == d.TERM 
                 select ic.INDEX_FAMILY_VERSION).Max();