C# 选择具有最大值的图元

C# 选择具有最大值的图元,c#,.net,entity-framework,linq,C#,.net,Entity Framework,Linq,首先,我有一个名为estadospordispitivos的SQL表,其中包含以下列: EstadoPorDispositivosID (PK, Int, Auto_Increment) DispositivoID, EstadoDispositivo, DateTimeInicio DateTimeFinal. 我想要的是从数据库中检索一个实体,该实体具有特定的ID,并且具有最大的EstadoPorDispositivosID 我在这一点上: using (var db = new C

首先,我有一个名为
estadospordispitivos
的SQL表,其中包含以下列:

EstadoPorDispositivosID (PK, Int, Auto_Increment)
DispositivoID, 
EstadoDispositivo, 
DateTimeInicio 
DateTimeFinal.
我想要的是从数据库中检索一个实体,该实体具有特定的
ID
,并且具有最大的
EstadoPorDispositivosID

我在这一点上:

using (var db = new ContextoDB())
{
    var estado = db.EstadosPorDispositivos
              .Where<EstadosPorDispositivo>(e => e.DipositivoID == this.DispositivoID && ...)
    (...)
}
使用(var db=new ContextoDB())
{
var estado=db.EstadosPorDispositivos
.其中(e=>e.DipositivoID==this.DispositivoID&&…)
(...)
}

只需按该属性排序,然后取第一个。 别忘了让数据库调用异步;)

使用:

或者不使用
Max
的另一种方式:

var estado = db.EstadosPorDispositivos.Where(e => e.DipositivoID == this.DispositivoID && ...)
                                      .OrderByDescending(t => t.EstadoPorDispositivosID)
                                      .FirstOrDefault()?.EstadoPorDispositivosID;

“别忘了让你的数据库调用异步”-如果你的代码库已经是同步的,那就不那么容易了。那么,为了获得最大值,你对所有元素都进行了排序?如果您想在乐队和作曲家列表中找到
ZZ top
,订购
Bach
Beethoven
似乎是一种浪费,生成的SQL查询将是一个
SELECT top(1)
,并且您的数据库足够智能,可以计算出只需要返回最大n(本例中为1)行。谢谢!这个在FirstOrDefault()之后,它的作用是什么?@AgustinMeinardo在执行成员访问之前,
将测试左侧操作数的值是否为null。它被称为空条件运算符
var estado = db.EstadosPorDispositivos.Where(e => e.DipositivoID == this.DispositivoID && ...)
                                      .Max(c => c.EstadoPorDispositivosID)
var estado = db.EstadosPorDispositivos.Where(e => e.DipositivoID == this.DispositivoID && ...)
                                      .OrderByDescending(t => t.EstadoPorDispositivosID)
                                      .FirstOrDefault()?.EstadoPorDispositivosID;