如何使用 LINQ 获取 List 中项目的所有属性并将它们转换为 GridColumn?
How to get all the properties of items in List and convert them to a GridColumn using LINQ?
我正在编写一个应用程序,我在其中获取这样的数据(字符串“SettingsSubPage”代表数据模型的名称,在本例中为“User”):
[Parameter]
public string SettingsSubPage { get; set; }
Results = ApiProvider.GetAll(System.Type.GetType(SettingsSubPage));
根据这些数据,我想显示除“UserRoles”之外的每个 属性,因此我创建了一个属性,使其能够隐藏数据:
属性:
public class HideInTableAttribute : Attribute
{
}
模态(用户)class:
public class User
{
public int Id { get; set; }
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessage = "This is not a valid email adress")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
[StringLength(50, MinimumLength = 5, ErrorMessage = "Password must be between 5 and 50 characters")]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Enabled { get; set; }
public DateTime LastLogin { get; set; }
*/ HERE WE HIDE THE PROPERTY /*
[HideInTable]
public List<UserRole> UserRoles { get; set; }
}
现在我想获得除“UserRoles”之外的这些属性的列表,并将它们设为 GridColumns,这样我就得到了 GridColumns 的列表。如何使它们成为 GridColumns(在其他 class 中使用)的示例可以这样完成:
.Select(x => new GridColumn()
{
Field = x.Name,
HeaderText = x.Name,
TextAlign = TextAlign.Center
})
.ToList();
所以我需要的是一个 LINQ 查询,它获取“SettingsSubpage”模型的属性并将它们转换为 GridColumns 并将它们放入列表中,到目前为止我已经尝试过的是:
List<System.Reflection.PropertyInfo> list = System.Type.GetType(SettingsSubPage).GetProperties().Where(x => x.GetCustomAttributes(true).OfType<HideInTableAttribute>().Any()).ToList();
但是这给了我这个错误:
希望有人能帮忙,在此先感谢!
你可以试试这个:
var propsList = typeof(T).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
.Where(x => !Attribute.IsDefined(x, typeof(HideInTableAttribute)))
.ToList();
Here T is the Class name
如果您的类型在另一个程序集中,您需要在 GetType 的 typeName 参数中提供 AssemblyQualifiedName。
例如
var mytype= Type.GetType("DnetAdminDashboard.DesktopNavigation.NavigationMenu, DnetAdminDashboard, Version=1.3.13.0, Culture=neutral, PublicKeyToken=null", true);
NavigationMenu 是 class
如果您不知道 AssemblyQualifiedName,请查看如何获取它。
您也可以加载程序集然后获取类型。
DnetAdminDashboard 是程序集
var assm = Assembly.Load("DnetAdminDashboard");
var myType = assm.GetTypes().FirstOrDefault(p => p.Name == "NavigationMenu");
我正在编写一个应用程序,我在其中获取这样的数据(字符串“SettingsSubPage”代表数据模型的名称,在本例中为“User”):
[Parameter]
public string SettingsSubPage { get; set; }
Results = ApiProvider.GetAll(System.Type.GetType(SettingsSubPage));
根据这些数据,我想显示除“UserRoles”之外的每个 属性,因此我创建了一个属性,使其能够隐藏数据:
属性:
public class HideInTableAttribute : Attribute
{
}
模态(用户)class:
public class User
{
public int Id { get; set; }
[Required(ErrorMessage = "Email is required")]
[DataType(DataType.EmailAddress)]
[EmailAddress(ErrorMessage = "This is not a valid email adress")]
public string Email { get; set; }
[Required(ErrorMessage = "Password is required")]
[DataType(DataType.Password)]
[StringLength(50, MinimumLength = 5, ErrorMessage = "Password must be between 5 and 50 characters")]
public string Password { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public bool Enabled { get; set; }
public DateTime LastLogin { get; set; }
*/ HERE WE HIDE THE PROPERTY /*
[HideInTable]
public List<UserRole> UserRoles { get; set; }
}
现在我想获得除“UserRoles”之外的这些属性的列表,并将它们设为 GridColumns,这样我就得到了 GridColumns 的列表。如何使它们成为 GridColumns(在其他 class 中使用)的示例可以这样完成:
.Select(x => new GridColumn()
{
Field = x.Name,
HeaderText = x.Name,
TextAlign = TextAlign.Center
})
.ToList();
所以我需要的是一个 LINQ 查询,它获取“SettingsSubpage”模型的属性并将它们转换为 GridColumns 并将它们放入列表中,到目前为止我已经尝试过的是:
List<System.Reflection.PropertyInfo> list = System.Type.GetType(SettingsSubPage).GetProperties().Where(x => x.GetCustomAttributes(true).OfType<HideInTableAttribute>().Any()).ToList();
但是这给了我这个错误:
希望有人能帮忙,在此先感谢!
你可以试试这个:
var propsList = typeof(T).GetProperties(BindingFlags.IgnoreCase | BindingFlags.Public | BindingFlags.Instance)
.Where(x => !Attribute.IsDefined(x, typeof(HideInTableAttribute)))
.ToList();
Here T is the Class name
如果您的类型在另一个程序集中,您需要在 GetType 的 typeName 参数中提供 AssemblyQualifiedName。
例如
var mytype= Type.GetType("DnetAdminDashboard.DesktopNavigation.NavigationMenu, DnetAdminDashboard, Version=1.3.13.0, Culture=neutral, PublicKeyToken=null", true);
NavigationMenu 是 class
如果您不知道 AssemblyQualifiedName,请查看如何获取它。
您也可以加载程序集然后获取类型。
DnetAdminDashboard 是程序集
var assm = Assembly.Load("DnetAdminDashboard");
var myType = assm.GetTypes().FirstOrDefault(p => p.Name == "NavigationMenu");