Linq to sql 存储库模式:如何实现deletehere,它接受业务实体的表达式 公共接口IRepository/:IDisposable 其中T: { IQueryable GetAll(); 无效保存(T实体); 无效删除(int-id); 无效删除(T实体); } 公共抽象类RepositoryBase:IRepository 其中T: 其中TDb:class,IDbEntity,new() { 受保护的抽象表GetTable(); 公共无效删除(int-id) { TDb dbEntity=GetDbEntity(id); if(dbEntity==null) { 抛出新的MyException(…); } GetTable().deleteosubmit(dbEntity); Context.SubmitChanges(); } //和其他方法。。。 }

Linq to sql 存储库模式:如何实现deletehere,它接受业务实体的表达式 公共接口IRepository/:IDisposable 其中T: { IQueryable GetAll(); 无效保存(T实体); 无效删除(int-id); 无效删除(T实体); } 公共抽象类RepositoryBase:IRepository 其中T: 其中TDb:class,IDbEntity,new() { 受保护的抽象表GetTable(); 公共无效删除(int-id) { TDb dbEntity=GetDbEntity(id); if(dbEntity==null) { 抛出新的MyException(…); } GetTable().deleteosubmit(dbEntity); Context.SubmitChanges(); } //和其他方法。。。 },linq-to-sql,design-patterns,repository,Linq To Sql,Design Patterns,Repository,目前,有必要实现通过表达式删除实体的方法。我希望在IRepository中使用以下方法: public interface IRepository<T>// : IDisposable where T : IEntity { IQueryable<T> GetAll(); void Save(T entity); void Delete(int id); void Delete(T entity); } public abstra

目前,有必要实现通过表达式删除实体的方法。我希望在IRepository中使用以下方法:

public interface IRepository<T>// : IDisposable
    where T : IEntity
{
    IQueryable<T> GetAll();
    void Save(T entity);
    void Delete(int id);
    void Delete(T entity);
}

public abstract class RepositoryBase<T, TDb> : IRepository<T>
    where T : IEntity
    where TDb : class, IDbEntity, new()
{
    protected abstract Table<TDb> GetTable();

    public void Delete(int id)
    {
        TDb dbEntity = GetDbEntity(id);

        if (dbEntity == null)
        {
            throw new MyException(...);
        }

        GetTable().DeleteOnSubmit(dbEntity);

        Context.SubmitChanges();
    }

    //  and other methods...   
}
void deletehere(表达式exprfoebusinentity);
这里的问题是,实现将如下所示:

void DeleteWhere(Expression<Func<IEntity, bool>> exprFoeBusinessEntity);
void deletehere(表达式exprfoebusinentity);
{
表达式exprFoeDbEntity
=exprWhere=>…//如何将ExprFoeBusinentity转换为exprFoeDbEntity
GetTable().DeleteAllOnSubmit(GetTable().Where(exprForDbEntity));
}
我不知道如何将业务实体的表达式转换为db实体的表达式

我可以很容易地将方法更改为接受带有db实体的表达式,但我希望我的存储库将DBEntities隐藏在其中

请告知。欢迎有任何想法


另外,我正在使用.NET 3.5(但4.0的解决方案也是可以接受的),ORM-Linq2Sql

猜一猜,我找到了一个很好的解决方案,下面是一个用于RepositoryBase类的新方法:

void DeleteWhere(Expression<Func<IEntity, bool>> exprFoeBusinessEntity);
{
    Expression<Func<IDbEntity, bool>> exprFoeDbEntity 
        = exprWhere=> ... // How to convert exprFoeBusinessEntity into exprFoeDbEntity

    GetTable().DeleteAllOnSubmit(GetTable().Where(exprForDbEntity)));
}
public void Delete(IQueryable实体)
{
IQueryable dbEntities=GetTable()
.在哪里(
dbEntity=>entities.Where(entity=>entity.Id==dbEntity.Id).Count()>0
)
;
GetTable().DeleteAllOnSubmit(dbEntities);
}

如果您在这里看到任何缺点,请告诉我。

猜一猜,我找到了一个很好的解决方案,下面是RepositoryBase类的一个新方法:

void DeleteWhere(Expression<Func<IEntity, bool>> exprFoeBusinessEntity);
{
    Expression<Func<IDbEntity, bool>> exprFoeDbEntity 
        = exprWhere=> ... // How to convert exprFoeBusinessEntity into exprFoeDbEntity

    GetTable().DeleteAllOnSubmit(GetTable().Where(exprForDbEntity)));
}
public void Delete(IQueryable实体)
{
IQueryable dbEntities=GetTable()
.在哪里(
dbEntity=>entities.Where(entity=>entity.Id==dbEntity.Id).Count()>0
)
;
GetTable().DeleteAllOnSubmit(dbEntities);
}
如果你发现这里有什么缺点,请告诉我