Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- protected virtual string BuildSelectStatement(Type type)
- {
- var virtualSelectableFields = EntityProvider.GetVirtualFields(type).Where(la =>
- {
- var attr = la.GetCustomAttribute<TitleAttribute>();
- return attr == null || !attr.HideForList;
- })
- .ToDictionary(la => la, la => la.GetCustomAttribute<IsVirtualAttribute>())
- .Where(la => la.Value != null && !String.IsNullOrEmpty(la.Value.SQLExpression))
- .ToDictionary(la => la.Key.Name, la => la.Value);
- var allRealFields = EntityProvider.GetRealFields(type);
- var realVisibleFields = new HashSet<PropertyInfo>(EntityProvider.GetRealFields(type).Where(la =>
- {
- var attr = la.GetCustomAttribute<TitleAttribute>();
- return attr == null || !attr.HideForList;
- }));
- var allSelectedLinksNames = new HashSet<string>(realVisibleFields.Where(la => la.GetCustomAttribute<LinkToAttribute>() != null).Select(la=>la.Name.ToUpper()));
- var fieldsWithCaptionsForLinks = allRealFields.Where(la => !realVisibleFields.Contains(la)).Where(la =>
- {
- var name = la.Name.ToUpper();
- return allSelectedLinksNames.Contains(name + "_ID") || allSelectedLinksNames.Contains(name.Replace("_NAME", String.Empty) + "_ID"); // Ищем в выбираемых ссылочных полях что-то, для чего текущее поле может быть заголовком
- }).Select(la=>la.Name);
- var selectFields = virtualSelectableFields.Select(la => la.Value.SQLExpression + " AS " + la.Key)
- .Union(realVisibleFields.Select(la => la.Name))
- .Union(fieldsWithCaptionsForLinks);
- var keyField = EntityProvider.GetKeyField(type);
- var virtualKeyAttr = keyField.GetCustomAttribute<IsVirtualAttribute>();
- if (virtualKeyAttr == null || !string.IsNullOrEmpty(virtualKeyAttr.SQLExpression))
- {
- selectFields = selectFields.Union(new[] { virtualKeyAttr == null? keyField.Name : virtualKeyAttr.SQLExpression + " AS " + keyField.Name });
- }
- return string.Join(", ", selectFields.Distinct());
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement