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 查询。它在我目前正在做的项目中对我派上了用场。
所以我正在写一个 '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 查询。它在我目前正在做的项目中对我派上了用场。