没有lambda表达式的实体框架查询

时间:2015-01-05 19:31:23

标签: c# entity-framework generics lambda

所以我正在写一个半通用的'使用签名

一遍又一遍地适合相同模式的类
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)

这可以让我绕过这个要求。

2 个答案:

答案 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查询。在我正在进行的项目中,它对我来说很方便。