【问题标题】:How do I keep the lastest entry of an item from a database如何保留数据库中项目的最新条目
【发布时间】:2013-04-22 20:21:32
【问题描述】:

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

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

假设我有这个方法:

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

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

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

【问题讨论】:

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


    【解决方案1】:

    我不确定我是否理解您的问题。此查询将返回您的 REGIONID 的最新记录:

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

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

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

    编辑:

    根据 Herve 的评论,上面的代码将返回一个对象而不是 List。如果您想改用列表(仅包含一项),请尝试:

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

    【讨论】:

    • 一个问题:我不习惯 c# ASP.NET 和 linq,所以为什么.First();?
    • 它将返回第一条记录。但它总是期望至少有一个记录。如果有可能出现零记录,则应使用 FirstOrDefault,它通常会返回第一条记录或 null。
    • 但这不会返回一个项目列表,而是一个项目。或者原始查询应该返回一个列表,这并不是“First()”允许我做的事情......
    • 当你真的只得到一个对象时,为什么还要返回一个列表?
    【解决方案2】:

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

    Select REGIONID, DATEMETEOBROADCAST
    From meteo.REGION
    Group By REGIONID
    

    然后您可以加入meteo.Regionmeteo.vwLatestMeteoDateMetroBroadcast 以获取最新消息

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2014-10-14
      • 2022-11-11
      相关资源
      最近更新 更多