public OrderMap Append(SqlTable map, IEnumerable <NamedOrderItem> namedOrderItems, bool throwOnMissingProperty = true, bool caseSensitive = true) { if (namedOrderItems == null) { return(this); } var setOrders = namedOrderItems.Where(x => x != null).Select(p => { if (!map.TryGetColumn(p.PropertyName, out var mapItem, caseSensitive)) { if (throwOnMissingProperty) { throw new ArgumentException($"Order property {p.PropertyName} have no counterpart in the map"); } else { return(null); } } var item = new OrderMapItem(mapItem, p.Direction); return(item); }).Where(x => x != null); Items.AddRange(setOrders); return(this); }
public OrderMap Append(SqlTable map, object order, bool throwOnMissingProperty = true, bool caseSensitive = true) { if (order == null) { return(this); } var mapType = order.GetType(); var orderProps = OrderProps.GetOrAdd(mapType, o => o.GetProperties() .Where(p => p.PropertyType == typeof(OrderItem)).ToDictionary(p => p.Name)); var entityProps = map; var setOrders = orderProps.Values.Select(p => { if (!map.TryGetColumn(p.Name, out var mapItem, caseSensitive)) { if (throwOnMissingProperty) { throw new ArgumentException($"Order property {p.Name} of type {mapType.Name} have no counterpart in the map"); } else { return(null, null); } } var orderItem = (OrderItem)p.GetValue(order); return(mapItem, orderItem); }) .Where(g => g.orderItem != null) .OrderBy(g => g.orderItem.Index) .Select(g => new OrderMapItem(g.mapItem, g.orderItem.Direction)); return(Append(setOrders)); }