Joh*_*ell 2 c# generics lambda entity-framework
所以我正在写一个"半通用"类,它与签名一遍又一遍地适合相同的模式
public class BaseSupportRepo<TEntity, TDto> where TEntity : class where TDto : class
Run Code Online (Sandbox Code Playgroud)
所有使用此类的repos都有一个属性 Name
我想要做的是编写一个函数,如果名称匹配某些输入(但名称不是主键),将返回.Single().
现在,如果这是一个非泛型函数,那么它很容易
.Single(g => g.Name == name)
Run Code Online (Sandbox Code Playgroud)
但是因为这是一个泛型函数,所以无法使用.Name属性,因为TEntity可能没有任何属性Name.
EF中是否有任何功能可以允许类似于: -
.Single(string key, string value)
Run Code Online (Sandbox Code Playgroud)
这将允许我绕过这个要求.
创建界面:
public interface IEntityWithName
{
string Name { get; set;}
}
Run Code Online (Sandbox Code Playgroud)
并将您的回购改为:
public class BaseSupportRepo<TEntity, TDto> where TEntity : class, IEntityWithName
where TDto : class
Run Code Online (Sandbox Code Playgroud)
如果您使用edmx文件生成了代码,则可以更改生成您的类的T4模板以实现IEntityWithName或创建如下所示的部分类:
public partial class SomeEntity : IEntityWithName
{
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以编写可以使用的查询 Name