Skip to main content
GameDev.net gamedev.net

PRO Tired of ads? Read GameDev.net ad-free and help keep the community independent with GameDev Pro — $3/month.

Activity streams

Activity streams

superpig
Continuous Refinement · · 1 min read
2,328 0
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();            }        }

Discussion

Loading comments...