0

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

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

所以假设我有这个方法:

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;}
}

现在这是不完整的,因为气象数据库可能在同一天有许多来自同一个城市的条目,我想随时获得绝对最新的。同样,由于一些懒惰的家伙(你明白了),它可能会在几天内“没有”任何条目。

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

4

2 回答 2

3

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

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

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

如果 source 不包含任何元素,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);
于 2013-04-22T20:23:31.957 回答
0

如果您可以在具有以下内容的数据库中创建一个视图,我建议您创建一个视图vwLatestMeteoDateMetroBroadcast

Select REGIONID, DATEMETEOBROADCAST
From meteo.REGION
Group By REGIONID

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

(假设您永远不会有来自同一区域的多行完全相同DATEMETEOBROADCAST

于 2013-04-22T20:28:01.230 回答