在我的数据库中,我有一个庞大的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广播的最新条目?
答案 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
)