2013-04-22 57 views
0

在我的数据库中,比方说,我收集了一个巨大的meteo广播。如何从数据库中保存一个项目的最新条目

例如,我想获取某个城市的所有meteobroadcast,但只返回最新的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); 
} 

和气象用途是这样的模式:

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广播的最新条目?

回答

3

我不完全确定我理解你的问题。该查询将返回最近的战绩为您REGIONID

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

在链接杰森张贴在评论,请记住:

第一(IEnumerable的)方法将引发 异常源不包含元素。当 源序列为空时,要使用FirstOrDefault方法返回默认值。

编辑:

每埃尔韦的评论,上面的代码将返回一个对象,而不是一个列表<>。如果您想改用名单(只有一个项目),尝试:

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

一个问题:我不习惯c#ASP.NET和linq,那么为什么'.First();?''''''''''' – hsim 2013-04-22 20:25:35

+0

它会返回第一条记录。但它总会期望至少有一个记录。如果存在ZERO记录的机会,则应该使用'FirstOrDefault',它通常会返回第一条记录或为空。 – 2013-04-22 20:26:21

+2

http://msdn.microsoft.com/en-us/library/bb291976.aspx – 2013-04-22 20:26:52

0

我建议创建一个视图,如果你能在DB称为vwLatestMeteoDateMetroBroadcast有这样的事情:

Select REGIONID, DATEMETEOBROADCAST 
From meteo.REGION 
Group By REGIONID 

然后,您可以加入meteo.Regionmeteo.vwLatestMeteoDateMetroBroadcast获得最近的一次

(假设你永远不会有来自同一地区的多个行具有完全相同的DATEMETEOBROADCAST

相关问题