Entity framework 没有 lambda 表达式的查询

Entity framework query without lambda expression

所以我正在写一个 'semi-generic' class 一遍又一遍地使用相同的签名

public class BaseSupportRepo<TEntity, TDto> where TEntity : class where TDto : class

所有使用此 class 的存储库都有一个属性,即 Name

我想做的是编写一个函数,如果名称与某些输入匹配(但名称不是主键),它将 return a .Single() 。

现在,如果这是一个非泛型函数,那就很容易了,因为

.Single(g => g.Name == name)

但是,由于这是一个通用函数,因此无法使用 .Name 属性,因为 TEntity 可能没有任何属性名称。

EF 中是否有任何函数允许类似于:-

.Single(string key, string value)

这样我就可以绕过这个要求。

创建接口:

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

的查询

看看这个故事:Where can I find the System.Linq.Dynamic dll?。 Dynamic.cs 我相信是由 Microsoft 的某个人编写的,它允许您使用字符串而不是 lambda 来编写 Linq 查询。它在我目前正在做的项目中对我派上了用场。