我能得到一些帮助来改进这个linq吗?我基本上是从db返回扬声器,但是如果在过去的一周里有他们发布的视频,就设置HasNew属性为真。
public IQueryable<Speaker> GetSpeakers()
{
var speakers = db.Speakers.OrderBy(x => x.DisplayName);
var newVidsSpeakers = db.Videos.Where(x => x.DatePosted > DateTime.Now.AddDays(-7)).Select(x=> x.Speaker).Distinct();
foreach (var item in newVidsSpeakers)
{
var sp = speakers.SingleOrDefault(x => x.ID == item.ID);
sp.HasNew = true;
}
return speakers;
}
2条答案
按热度按时间7d7tgy0s1#
你为什么要打第二个电话呢?你应该可以做到:
xdnvmnnf2#
如果不知道您使用的是什么LINQ提供程序(例如默认的LINQ To SQL或对象关系Map器,如Mindscape Lightspeed或NHibernate)或有关数据库架构的信息,则很难给予 * 任何 * 建议。
因此,在知道这一点之前,我能做的最好的事情是重新安排LINQ语句,为所选的提供程序给予更多的知识/上下文,以便它能够更好地优化查询,从而可能减少数据库调用的数量。
注意:您可能会发现不可能将其简化为单个数据库调用。
这就是我编写类似查询的方式。
DateTime.Now.Date
和x.DataPosted.Date
,这样我们就不会比较时间,也就是说,即使您在晚上11:59搜索,您也希望找到自上周以来的所有视频。