
public static List GetUserPermissions(UserPermissionArgs userPermissionArgs)
{
var permissions = helper.GetModelFromDB("GetUserPermissions", GetNonNullAttributes(userPermissionArgs).ToArray()).ToList();
permissions = permissions.GroupBy(d => d.PermissionId).Select(x => x.First()).ToList();
// Add available permissions that user does not have to list of permissions
var allPermissions = GetPermission(new PermissionArgs() { });
foreach (var permission in allPermissions)
{
if (permissions.All(p => p.PermissionId != permission.Id))
{
permissions.Add(new UserPermission() { PermissionId = permission.Id, State = false });
}
}
Parallel.ForEach(permissions, permission => permission.Permission = GetPermission(new PermissionArgs()
{ PermissionId = permission.PermissionId }).Single());
return permissions.ToList();
}
private static IEnumerable GetNonNullAttributes(object args, bool checkStringsEmpty = true)
{
PropertyInfo[] properties = args.GetType().GetProperties();
List parameters = new List();
foreach (PropertyInfo property in properties)
{
object[] attributes = property.GetCustomAttributes(true);
foreach (var attribute in attributes.Where(attribute => attribute.GetType() == typeof(SpParameter)).Where(attribute => property.GetValue(args) != null))
{
if (checkStringsEmpty && property.GetType() == typeof(string))
{
if (string.IsNullOrEmpty((string)property.GetValue(args)))
{
//If string is empty, don't add it as a parameter
continue;
}
}
SpParameter param = (SpParameter)attribute;
parameters.Add(new SqlParameter(param.Name, property.GetValue(args)));
}
}
return parameters;
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ull-values