ShellColumns.cs 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Expressions;
  5. using InABox.Core;
  6. namespace InABox.Avalonia
  7. {
  8. public class ShellColumns<TParent,TEntity> : IShellColumns<TEntity> where TEntity : Entity
  9. {
  10. private static Dictionary<string, Tuple<int,Expression<Func<TEntity, object?>>>> _columns = new Dictionary<string, Tuple<int,Expression<Func<TEntity, object?>>>> ();
  11. public int IndexOf(string name) => _columns[name].Item1;
  12. public Expression<Func<TEntity, object?>> this[string name] => _columns[name].Item2;
  13. public ShellColumns<TParent,TEntity> Map(string property, Expression<Func<TEntity, object?>> expression)
  14. {
  15. int iCol = _columns.Keys.Count;
  16. bool bFound = _columns.TryGetValue(property, out var column);
  17. try
  18. {
  19. if (bFound)
  20. iCol = column.Item1;
  21. }
  22. catch (Exception e)
  23. {
  24. }
  25. _columns[property] = new Tuple<int, Expression<Func<TEntity, object?>>>(iCol, expression);
  26. //_columns[property] = new Tuple<int, Expression<Func<TEntity, object>>>(_columns.Keys.Count, expression);
  27. return this;
  28. }
  29. public Columns<TEntity> Columns => new Columns<TEntity>(ColumnTypeFlags.None).Add(_columns.Select(x => x.Value.Item2).ToArray());
  30. public int Count => _columns.Count;
  31. }
  32. }