所以我正在写一个半通用的'使用签名
一遍又一遍地适合相同模式的类public class BaseSupportRepo<TEntity, TDto> where TEntity : class where TDto : class
使用此类的所有repos都有一个属性Name
我想要做的是编写一个函数,如果名称与某个输入相匹配,将返回.Single()(但名称不是主键)。
现在,如果这是一个非通用的功能,那么它很容易,因为
.Single(g => g.Name == name)
但是因为这是一个泛型函数,所以无法使用.Name属性,因为TEntity可能没有任何属性Name。
EF中是否有任何功能可以允许类似于: -
.Single(string key, string value)
这可以让我绕过这个要求。
答案 0 :(得分:5)
创建界面:
public interface IEntityWithName
{
string Name { get; set;}
}
将您的回购改为:
public class BaseSupportRepo<TEntity, TDto> where TEntity : class, IEntityWithName
where TDto : class
如果您使用edmx文件生成了代码,则可以更改生成类的T4模板以实现IEntityWithName
或创建如下的部分类:
public partial class SomeEntity : IEntityWithName
{
}
然后,您可以编写可以使用Name
答案 1 :(得分:0)
看一下这个故事:Where can I find the System.Linq.Dynamic dll?。 Dynamic.cs是由Microsoft的某个人编写的,我相信它允许您使用字符串而不是lambdas编写Linq查询。在我正在进行的项目中,它对我来说很方便。