public static Qb ListRids <T>(this List <T> me) where T : IDataObject, new() { Qb retv = new Qb(); for (int i = 0; i < me.Count; i++) { retv.Append($"@{++upseq}_{i}", me[i].RID); if (i < me.Count - 1) { retv.Append(","); } } return(retv); }
public IQueryBuilder GenerateGetStateChangesQuery(List <Type> workingTypes, Dictionary <Type, MemberInfo[]> fields, DateTime moment) { var dataLen = fields.Max(f => f.Value.Length); Qb query = new Qb(""); workingTypes.ForEachIndexed((type, ti) => { var cTimeField = fields[type].FirstOrDefault(f => f.GetCustomAttribute <CreationTimeStampAttribute>() != null); var uTimeField = fields[type].FirstOrDefault(f => f.GetCustomAttribute <UpdateTimeStampAttribute>() != null); query.Append($"(SELECT \r\n\t'{type.Name}' AS TypeName, "); for (int i = 0; i < dataLen; i++) { if (fields[type].Length > i) { query.Append($"\r\n\tCAST({fields[type][i].Name} AS BINARY)"); } else { query.Append("\r\n\tNULL"); } if (ti == 0) { query.Append($"AS data_{i}"); } if (i < dataLen - 1) { query.Append(","); } } query.Append("\r\nFROM"); query.Append(type.Name); if (moment != DateTime.MinValue && (cTimeField != null || uTimeField != null)) { query.Append("\r\nWHERE"); if (cTimeField != null) { query.Append($"{cTimeField.Name} > @m", moment); } if (cTimeField != null && uTimeField != null) { query.Append("OR"); } if (uTimeField != null) { query.Append($"{uTimeField.Name} > @m", moment); } } query.Append(")\r\n"); if (ti < workingTypes.Count - 1) { query.Append("UNION ALL\r\n"); } }); return(query); }