我正在尝试创建一个通用方法,该方法将读取类的属性并在运行时返回该值.我该怎么做?
注意:DomainName属性属于DomainNameAttribute类.
[DomainName("MyTable")]
Public class MyClass : DomainBase
{}
Run Code Online (Sandbox Code Playgroud)
我想要生成的内容:
//This should return "MyTable"
String DomainNameValue = GetDomainName<MyClass>();
Run Code Online (Sandbox Code Playgroud) 我想调用一个需要这样的参数的方法:
Expression<Func<sometype, 'a>> expr
Run Code Online (Sandbox Code Playgroud)
我需要在运行时构造这个参数,因为我不知道之前的匿名类型是什么样的; 它可以有任何数量的字段:
x => new { a=x.a, b=x.b, c=x.c, etc... }
Run Code Online (Sandbox Code Playgroud)
我可以在运行时创建一个类型具有相同的'签名'(这是正确的单词吗?)作为所需的匿名类型,但问题是:如何在运行时从那个构造这个lambda表达式?特别是Expression.New是烦我的,因为我需要传递一个构造函数信息给它,我必须从一个现有的类型(它确实可以是一个匿名类型,但我不能在运行时创建一个匿名类型.或者在那里一种方法吗?).
更新(评论中要求的一些上下文)
我想调用的方法是:
DependentNavigationPropertyConfiguration.HasForeignKey<TKey>(Expression<Func<TDependentEntityType, TKey>> foreignKeyExpression)
Run Code Online (Sandbox Code Playgroud)
我想这样做的原因是自动为从某个基类继承的实体创建一个导航属性,包括该外键中该基类的键.因为实体可以有多个任何类型的键字段,所以TKey类型只在运行时才为我所知.
c# reflection entity-framework anonymous-types expression-trees
我想修改现有的通用存储库以添加可选select功能,例如 Entity Framework Core 中的功能。
期望的结果:
private readonly IUnitOfWork _unit;
// ...
// without using select functionality
IEnumerable<Entity> entities = await _unit.Account.AllAsync();
Entity? x = await _unit.Account.SingleAsync(x => x == id);
// using select functionality
IEnumerable<DTO> y = await _unit.Account.AllAsync(select: x => new DTO
{
Name = x.Name
});
DTO? y = await _unit.Account.SingleAsync(x => x == id, select: x => new DTO
{
Name = x.Name
});
Run Code Online (Sandbox Code Playgroud)
我尝试实现此问题的解决方案Select certain columns in a genericrepository function但参数是必需的,我希望它是可选的。
为简单起见,我只在通用存储库中保留要添加此功能的方法: …