C# 实体框架在查询外部生成谓词函数

C# 实体框架在查询外部生成谓词函数,c#,entity-framework,C#,Entity Framework,我使用的EF模型与DTO分离,由于我需要为许多类实现相同的函数(GetByPrimarykey、GetBy、GetAll等等),我认为拥有抽象类会很好: protected List<T> GetBy(Func<T, bool> func) { return WorkingSet.Where(func).ToList(); } protected T GetFirstBy(Func<

我使用的EF模型与DTO分离,由于我需要为许多类实现相同的函数(
GetByPrimarykey
GetBy
GetAll
等等),我认为拥有抽象类会很好:

       protected List<T> GetBy(Func<T, bool> func)
        {
            return WorkingSet.Where(func).ToList();
        }
        protected T GetFirstBy(Func<T, bool> func)
        {
            return WorkingSet.FirstOrDefault(func);
        }
        public virtual T GetByPrimaryKey(K key)
        {
           return WorkingSet.FirstOrDefault(GetByKeyPredict(key));
        }

查询很好,但我确实需要predict来工作,因为我们证明了
GetBy
函数非常有用。

您需要使用表达式才能获得SQL翻译。e、 g

protected List<T> GetBy(Expression<Func<T, bool>> func)
        {
            return WorkingSet.Where(func).ToList();
        }
        protected T GetFirstBy(Expression<Func<T, bool>> func)
        {
            return WorkingSet.FirstOrDefault(func);
        }
受保护列表GetBy(Expression func)
{
返回WorkingSet.Where(func.ToList();
}
受保护的T GetFirstBy(表达式函数)
{
返回工作集FirstOrDefault(func);
}
本例中的目标是使用IQueryable中的方法,而不是IEnumerable,因为IQueryable的方法会转换为SQL。
我希望这有帮助

帮助、解决问题并很好地解释它(很好的答案:)
public override MyTypeGetByPrimaryKey(int key)
{
    return WorkingSet.FirstOrDefault(s => s.MyTypeId== key);
}
protected List<T> GetBy(Expression<Func<T, bool>> func)
        {
            return WorkingSet.Where(func).ToList();
        }
        protected T GetFirstBy(Expression<Func<T, bool>> func)
        {
            return WorkingSet.FirstOrDefault(func);
        }