提问人:Mohamad Usman 提问时间:11/10/2023 最后编辑:Mohamad Usman 更新时间:11/11/2023 访问量:56
如何在运行时创建数据库列的动态属性?
How can I create dynamic properties of database columns at runtime?
问:
我想完全动态地创建同步数据网格。我正在尝试创建一个动态类,该类在运行时创建属性,而不是硬编码的属性。请指导我该怎么做。 我试过什么:
Sp 类
公共类 Sp:DynamicObject {
Dictionary<string, object> properties = new Dictionary<string, object>();
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
string name = binder.Name;
return properties.TryGetValue(name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
properties[binder.Name] = value;
return true;
}
public override IEnumerable<string> GetDynamicMemberNames()
{
return properties?.Keys;
}
}
ApplicationDbContext
公共类 ApplicationDbContext:DbContext
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options): base(options)
{
}
public DbSet<Sp> DisplaySp { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Sp>().HasNoKey();
base.OnModelCreating(modelBuilder);
}
}
控制器端
[Http获取]
[Route("Getspdetails")]
public Task<List<Sp>> GetData()
{
var result = _services.Get();
return result;
}
服务
公共异步 Task<List> Get()
{
var data = _context.DisplaySp.FromSqlRaw("Execute Tbl_DailySaleRpSP @nType = 0,@nsType = 2").ToList();
return data;
}
剃刀页面
<GridPageSettings PageSize="10"></GridPageSettings>
<GridAggregates>
<GridAggregate>
<GridAggregateColumns>
@foreach (var col in columns)
{
<GridAggregateColumn Field="@col" Type="AggregateType.Sum">
<FooterTemplate>
@{
var aggregate = (context as AggregateTemplateContext);
<div>
<p>@aggregate?.Sum</p>
</div>
}
</FooterTemplate>
</GridAggregateColumn>
}
</GridAggregateColumns>
</GridAggregate>
</GridAggregates>
</SfGrid>
@code {
public List<Sp> Spdetails { get; set; } = new List<Sp>();
public List<string> columns { get; set; } = new List<string>();
protected override async Task OnInitializedAsync()
{
Spdetails = await Http.GetFromJsonAsync<List<Sp>>("Getspdetails");
if (Spdetails != null && Spdetails.Count > 0) {
PropertyInfo[] props = typeof(Sp).GetProperties();
foreach (var prop in props)
{
if (prop.PropertyType == typeof(int) || prop.PropertyType == typeof(double) || prop.PropertyType == typeof(decimal))
{
columns.Add(prop.Name);
}
}
}
}
请仔细阅读代码并指导我,因为现在我收到“序列没有元素”的错误。
答: 暂无答案
评论
dynamic
dynamic