【发布时间】:2023-03-31 17:55:02
【问题描述】:
我有一个包含一些通用方法的存储库类。一个是
public IEnumerable<T> FindAll<T>(Expression<Func<T, bool>> predicate) where T : class
{
return GetDbSet<T>().Where(predicate);
}
对于单元测试,我有一个TestRepository,它使用内存中的对象而不是数据库。 TestRepository 覆盖 FindAll 方法,我想控制返回的内容。所以我希望能够做这样的事情:
public override IEnumerable<T> FindAll<T>(Expression<Func<T, bool>> predicate)
{
return MyEntities.Where(predicate).Cast<T>();
}
但MyEntities.Where() 只接受Expression<Func<MyEntity, bool>>。
如何将泛型表达式转换/转换为强类型表达式?
【问题讨论】:
-
您是否考虑过模拟您的存储库?
-
@JakubKonecki:这不正是他在这里所做的吗?
-
@Jon - 不,他不是在嘲笑。
-
了解Covariance & Contravariance 可能会有所帮助。
-
@SaeedNamati:或者它可能不会。与本案无关。
标签: c# unit-testing lambda