如何保留数据库中项目的最新条目?

本文关键字:项目 最新 数据库 何保留 保留 | 更新日期: 2023-09-27 18:10:27

在我的数据库中,假设我有一个巨大的气象广播集合。

例如,我想获得来自特定城市的所有气象广播,但只返回最新的气象广播条目,而不是全部。这样我就能得到这个城市所有城镇/地区的气象广播列表。

假设我有这个方法:

internal List<METEO> ListLatestMeteoByRegion(int _id)
{
    var meteoQry = from meteo in db.METEO
                   where meteo.REGION.REGIONID == _id
                   // SORT METEO BY DATETIME???
                   select meteo;
    List<METEO> listToReturn = new List<METEO>;
    listToReturn.AddRange(meteoQry);
}

和METEO是这个模型:

public class METEO
{
    public int METEOID { get; set;} 
    public int REGIONDID { get; set; }
    public Region region { get;set; }
    public int DISTRICTID { get; set; }
    public District district { get; set;}
    public DateTime DATEMETEOBROADCAST { get; set; }
    public string METEOOUTSIDE { get; set;}
}

现在这是不完整的,因为meteo数据库可能在同一天有来自同一城市的许多条目,而我想始终获得绝对最新的条目。同样,由于一些懒惰的家伙(你知道的),它可能几天内"没有"任何条目。

我如何检查数据库以确保我只获得并保留这种气象广播的最新条目?

如何保留数据库中项目的最新条目?

我不太明白你的问题。这个查询将返回REGIONID最近的记录:

var meteoQry = (from meteo in db.METEO
                   where meteo.REGION.REGIONID == _id
                   orderby meteo.DATEMETEOBROADCAST descending
                   select meteo).First();

在Jason在评论中发布的链接中,请记住:

First(IEnumerable)方法抛出异常源不包含任何元素。时返回默认值如果源序列为空,则使用FirstOrDefault方法。

编辑:

根据Herve的注释,上面的代码将返回一个对象而不是List<>。如果您想使用列表(只有一个项目),请尝试:

var meteoQry = (from meteo in db.METEO
                   where meteo.REGION.REGIONID == _id
                   orderby meteo.DATEMETEOBROADCAST descending
                   select meteo).Take(1);

如果可以的话,我建议在数据库中创建一个名为vwLatestMeteoDateMetroBroadcast的视图,它的内容如下:

Select REGIONID, DATEMETEOBROADCAST
From meteo.REGION
Group By REGIONID

您可以将meteo.Regionmeteo.vwLatestMeteoDateMetroBroadcast连接以获得最近的一个

(假设您从未有来自同一地区的多行具有完全相同的DATEMETEOBROADCAST)