Advertisement
Guest User

Untitled

a guest
Feb 28th, 2017
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.33 KB | None | 0 0
  1. protected virtual string BuildSelectStatement(Type type)
  2.         {
  3.             var virtualSelectableFields = EntityProvider.GetVirtualFields(type).Where(la =>
  4.             {
  5.                     var attr = la.GetCustomAttribute<TitleAttribute>();
  6.                     return attr == null || !attr.HideForList;
  7.                 })
  8.                 .ToDictionary(la => la, la => la.GetCustomAttribute<IsVirtualAttribute>())
  9.                 .Where(la => la.Value != null && !String.IsNullOrEmpty(la.Value.SQLExpression))
  10.                 .ToDictionary(la => la.Key.Name, la => la.Value);
  11.  
  12.             var allRealFields = EntityProvider.GetRealFields(type);
  13.             var realVisibleFields = new HashSet<PropertyInfo>(EntityProvider.GetRealFields(type).Where(la =>
  14.             {
  15.                 var attr = la.GetCustomAttribute<TitleAttribute>();
  16.                 return attr == null || !attr.HideForList;
  17.             }));
  18.  
  19.             var allSelectedLinksNames = new HashSet<string>(realVisibleFields.Where(la => la.GetCustomAttribute<LinkToAttribute>() != null).Select(la=>la.Name.ToUpper()));
  20.  
  21.             var fieldsWithCaptionsForLinks = allRealFields.Where(la => !realVisibleFields.Contains(la)).Where(la =>
  22.             {
  23.                 var name = la.Name.ToUpper();
  24.                 return allSelectedLinksNames.Contains(name + "_ID") || allSelectedLinksNames.Contains(name.Replace("_NAME",  String.Empty) + "_ID"); // Ищем в выбираемых ссылочных полях что-то, для чего текущее поле может быть заголовком
  25.             }).Select(la=>la.Name);
  26.  
  27.             var selectFields = virtualSelectableFields.Select(la => la.Value.SQLExpression + " AS " + la.Key)
  28.                     .Union(realVisibleFields.Select(la => la.Name))
  29.                     .Union(fieldsWithCaptionsForLinks);
  30.  
  31.             var keyField = EntityProvider.GetKeyField(type);
  32.             var virtualKeyAttr = keyField.GetCustomAttribute<IsVirtualAttribute>();
  33.             if (virtualKeyAttr == null || !string.IsNullOrEmpty(virtualKeyAttr.SQLExpression))
  34.             {
  35.                 selectFields = selectFields.Union(new[] { virtualKeyAttr == null? keyField.Name : virtualKeyAttr.SQLExpression + " AS " + keyField.Name });
  36.             }
  37.  
  38.             return string.Join(", ",  selectFields.Distinct());
  39.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement