Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics


Activity streams

Posted by superpig, 05 May 2010 · 82 views

Today's chocolate-chunk-o'-LINQ:


        public ActivityLogEntry[] GetActivitiesFiltered(DateTime? startTime, DateTime? endTime, Uri[] actors, Uri[] actorTypes, Uri[] objects, Uri[] objectTypes, Uri[] verbs, int? maxToFetch)
        {
            using(var context = new ActivityEntities())
            {
                var entries = context.Activities.AsQueryable();

                if (startTime.HasValue)
                    entries = entries.Where(act => act.timestamp >= startTime.Value);
                if (endTime.HasValue)
                    entries = entries.Where(act => act.timestamp <= endTime.Value);

                if (actors != null)
                    entries = actors.Length == 1 ? entries.Where(ent => ent.actorUri == actors.First().ToString())
                        : entries.Join(actors, ent => ent.actorUri, act => act.ToString(), (ent, act) => ent);
                if (actorTypes != null)
                    entries = actorTypes.Length == 1 ? entries.Where(ent => ent.actorType == actorTypes.First().ToString())
                        : entries.Join(actorTypes, ent => ent.actorType, act => act.ToString(), (ent, act) => ent);

                if (objects != null)
                    entries = objects.Length == 1 ? entries.Where(ent => ent.objectUri == objects.First().ToString())
                        : entries.Join(objects, ent => ent.objectUri, act => act.ToString(), (ent, act) => ent);
                if (objectTypes != null)
                    entries = objectTypes.Length == 1 ? entries.Where(ent => ent.objectType == objectTypes.First().ToString())
                        : entries.Join(objectTypes, ent => ent.objectType, act => act.ToString(), (ent, act) => ent);

                if (verbs != null)
                    entries =
                        entries.Where(
                            act => act.ActivityVerbs.Join(verbs, v => v.verb, w => w.ToString(), (v, w) => w).Any());

                if (maxToFetch.HasValue)
                    entries = entries.Take(maxToFetch.Value);

                return entries.Select(MakeFromEntity).ToArray();
            }
        }







PARTNERS