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

时间:2013-04-22 20:21:33

标签: c# sql asp.net-mvc linq datetime

在我的数据库中,我有一个庞大的meteo广播集合。

例如,我想从特定城市获得所有的meteobroadcast,但只返回最新的meteo广播条目,而不是全部。所以我会得到一个城市所有城镇/地区的meteo广播列表。

所以我想说我有这个方法:

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数据库可能在同一天有来自同一城市的许多条目,我想在任何时候得到绝对最新的。同样,由于一些懒惰的人(你得到了这个想法),它可能“没有”获得任何入口几天。

我如何检查数据库以确保我只获得并保留这样一个meteo广播的最新条目?

2 个答案:

答案 0 :(得分:3)

我不完全确定我理解你的问题。此查询将返回REGIONID的最新记录:

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

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

  

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

编辑:

Per Herve的评论,上面的代码将返回一个对象而不是List&lt;&gt;。如果您想使用列表(只有一个项目),请尝试:

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

答案 1 :(得分:0)

我建议你创建一个视图,如果你可以在名为vwLatestMeteoDateMetroBroadcast的数据库中创建一个类似的东西:

Select REGIONID, DATEMETEOBROADCAST
From meteo.REGION
Group By REGIONID

然后,您可以meteo.Region加入meteo.vwLatestMeteoDateMetroBroadcast以获取最新的

(假设您从来没有来自相同区域的多个行具有完全相同的DATEMETEOBROADCAST