public static IQueryable <AuditEntry> GetAudits <T>(this DbContext context, params object[] keyValues) where T : class { var auditSet = AuditManager.GetAuditSet(context); var keyNames = context.GetKeyNames <T>(); var query = auditSet.Where(x => x.EntityTypeName == typeof(T).Name); if (keyValues == null) { throw new Exception(ExceptionMessage.Audit_Key_Null); } if (keyValues.Length != keyNames.Length) { throw new Exception(ExceptionMessage.Audit_Key_OutOfBound); } for (var i = 0; i < keyNames.Length; i++) { var propertyName = keyNames[i]; var value = keyValues[i] != null ? keyValues[i].ToString() : ""; query = query.Where(x => x.Properties.Any(y => y.PropertyName == propertyName && y.NewValueFormatted == value)); } query = query.Include(x => x.Properties).OrderBy(x => x.CreatedDate); return(query); }
public static IQueryable <AuditEntry> GetAudits <T>(this DbContext context, T entry) where T : class { var auditSet = AuditManager.GetAuditSet(context); var keyNames = context.GetKeyNames <T>(); if (entry == null) { return(auditSet.Where(x => false)); } var query = auditSet.Where(x => x.EntityTypeName == typeof(T).Name); foreach (var keyName in keyNames) { var property = entry.GetType().GetProperty(keyName); var value = property.GetValue(entry); query = query.Where(x => x.Properties.Any(y => y.PropertyName == property.Name && y.NewValueFormatted == value.ToString())); } query = query.Include(x => x.Properties).OrderBy(x => x.CreatedDate); return(query); }