public IEnumerable <Frame> Search(string projectName, ICriterion criterion) { var converter = new FrameDomainEntityConverter(); using (var context = ContextFactory.GetContext(projectName)) { var query = context.FrameEntities.AsExpandable(); var visitor = new FrameCriterionVisitor(); var exp = (Expression <Func <FrameEntity, bool> >)criterion.Accept(visitor); var frames = query.Where(exp).ToList(); var converted = frames.Select(x => converter.ToDomain(x, context)).ToList(); return(converted); } }
/// <summary> /// Gets the frame. /// </summary> /// <param name="projectName">Name of the project.</param> /// <param name="position">The position.</param> /// <param name="threadId">The thread identifier.</param> /// <returns>Frame.</returns> /// <exception cref="IndexOutOfRangeException"></exception> public Frame GetFrame(string projectName, Position position, int threadId) { using (var context = ContextFactory.GetContext(projectName)) { var first = context.FrameEntities.FirstOrDefault(x => x.PosHi == position.High && x.PosLo == position.Low && x.ThreadId == threadId); if (first == null) { throw new IndexOutOfRangeException( $"Count not find a frame with position: {position} and threadid: {threadId}"); } var converter = new FrameDomainEntityConverter(); return(converter.ToDomain(first, context)); } }