Search code examples
c#linqlinq-to-sql

improve linq call to make one db call


Can I have some help in improving this linq. I'm basically returning speakers from the db but setting HasNew property true if there has been a video by them posted in the past week.

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

Solution

  • Why are you making the second call anyway? You should just be able to do:

    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 speaker in newVidsSpeakers)
        {
            speaker.HasNew = true;
        }
        return speakers;
    }