Implementieren der FindAll () - Methode für das Repository

Ich habe das folgende Repository-Muster. Voraussetzung ist die Suche nach allen Konten mit dem Eigentümernamen Lijo. Also muss ich eine FindAll-Funktion schreiben. Wie schreibe ich diese Funktion?

Einschränkungen sind:

1) Der Client "BankAccountService" sollte keine Klassen aus 'DBML_Project' verwenden.

2) Wir sollten NICHT die GetAll-Methode verwenden, um die vollständige Liste der Konten zurückzuholen und dann einen Filter durchzuführen.

Hinweis: Bei der Bearbeitung der Frage bin ich auf dieses Problem gestoßenPolymorphismus: Ist die ORM-Entität eine Domänen- oder Datenentität?

CODE

namespace ApplicationService_Bank
{
public class BankAccountService
{
    RepositoryLayer.ILijosBankRepository accountRepository = new RepositoryLayer.LijosSimpleBankRepository();

    public void FreezeAllAccountsForUser(string userName)
    {
        //Should not use assembly 'DBML_Project'.

        IEnumerable<DomainEntitiesForBank.IBankAccount> accountsForUserWithNameLIJO = null;
        //accountsForUserWithNameLIJO = accountRepository.FindAll(p => p.BankUser.Name == "Lijo");
    }

}

}


namespace RepositoryLayer
{
public interface ILijosBankRepository
{
    List<DomainEntitiesForBank.IBankAccount> GetAll();
    IEnumerable<DBML_Project.BankAccount> FindAll(System.Func<DBML_Project.BankAccount, bool> predicate);
    void SubmitChanges();
        }

public class LijosSimpleBankRepository : ILijosBankRepository
{

    private IBankAccountFactory bankFactory = new MySimpleBankAccountFactory();
    public System.Data.Linq.DataContext Context
    {
        get;
        set;
    }

    public virtual List<DomainEntitiesForBank.IBankAccount> GetAll()
    {

        List<DBML_Project.BankAccount> allItems = Context.GetTable<DBML_Project.BankAccount>().ToList();
        List<DomainEntitiesForBank.IBankAccount> bankAccounts = new List<DomainEntitiesForBank.IBankAccount>();
        foreach (DBML_Project.BankAccount acc in allItems)
        {
            DomainEntitiesForBank.IBankAccount theAccount = bankFactory.CreateAccount(acc.AccountType, acc.BankAccountID, acc.Status, acc.OpenedDate, acc.AccountOwnerID);
            bankAccounts.Add(theAccount);
        }
        return bankAccounts;
    }


    public IEnumerable<DBML_Project.BankAccount> FindAll(System.Func<DBML_Project.BankAccount, bool> predicate)
    {
        //Where
        var results = Context.GetTable<DBML_Project.BankAccount>().Where(predicate);
        return results;
    }

    public virtual void SubmitChanges()
    {
        Context.SubmitChanges();
    }

}

}

LESEN:

Rückgabe von IEnumerable <T> vs. IQueryable <T>

Wie wird das Repository-Muster entworfen, um später einfach zu einem anderen ORM wechseln zu können?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage