public PropertyFilterComponent(IAuditProperty <TProp> prop, TProp value, PropertyValueComparison comparison) { Property = prop; Comparison = comparison; Value = value; Expression <Func <AuditPropertyValue, bool> > valuePredicate; if (typeof(TProp) == typeof(string) && (comparison == PropertyValueComparison.Contains || comparison == PropertyValueComparison.NotContains)) { var asStr = Convert.ToString(value); valuePredicate = comparison == PropertyValueComparison.Contains ? Expr.Create(( AuditPropertyValue v ) => v.StringValue.Contains(asStr)) : Expr.Create(( AuditPropertyValue v ) => !v.StringValue.Contains(asStr)); } else { var valueAccessor = AuditPropertyValue.GetAccessorExpression <TProp>(); valuePredicate = Expression.Lambda <Func <AuditPropertyValue, bool> >( Expression.MakeBinary(Op(Comparison), valueAccessor.Body, Expression.Constant(Value)), valueAccessor.Parameters); } Filter = e => e.PropertyValues.Any(p => p.PropertyId == Property.ID && valuePredicate.Invoke(p)); Filter = Filter.Expand(); }
public static IAuditEventBuilder With <T>(this IAuditEventBuilder builder, IAuditProperty <T> prop, T value) { var pv = new AuditPropertyValue { PropertyId = prop.ID }; pv.SetValue(value); return(builder.With(pv)); }
public IAuditEventBuilder With(AuditPropertyValue pv) { throw new Lpp.Utilities.CodeToBeUpdatedException(); //return new EventBuilder( _service, _event, () => //{ // _commit(); // pv.Event = _event; // _service.PropertyValues.Add( pv ); //} ); }