0

LINQ to SQL を使用した汎用リポジトリの例を多数見つけました。ただし、これらの関数を呼び出す方法については十分な例がありません。クライアントが次の機能を使用する方法の例を教えてください。

注: 私の質問はFunc T,boolの使用に関するものです。それを使用する可能な方法は何ですか?

注: BankAccount はエンティティです。

class MyRepository<T> : IRepository<T> where T : class
{
    ..........

    public IEnumerable<T> FindAll(Func<T,bool> predicate)
    {
        return Context.GetTable<T>().Where(predicate);
    }

    public T FindByID(Func<T,bool> predicate)
    {
        return Context.GetTable<T>().SingleOrDefault(predicate);
    }
}

編集

応答に基づいて、次のように使用しました。

 public RepositoryLayer.Account FindFirstAccount()
    {
        Func<RepositoryLayer.Account, bool> predicate = (p => p.AccountNumber == 1);
        List<RepositoryLayer.Account> accList =  (accountRepository.FindAll(predicate)).ToList();
        return accList[0];
    }

注: List RepositoryLayer.Account accList = (List RepositoryLayer.Account) accountRepository.FindAll(predicate); 動作しないでしょう

4

3 に答える 3

3

例えば:

var repository = new MyRepository<Person>();
var personsOlderThan50 = repository.FindAll(p=>p.Age > 50);
于 2012-06-21T17:37:38.000 に答える
2

Func T, bool は、ジェネリック パラメーター T を受け取り、bool を返すデリゲートです。あなたの場合、次のようなリポジトリを使用します

var repository = new MyRepository<BankAccount>;
var account = repository.FindByID(a=>a.AccountId == 10);
于 2012-06-21T17:43:59.237 に答える
0

Func を指定するにはいくつかの方法があります。これは本質的に、delegate1 つのパラメーターを取り、bool を返す a です。

ほとんどの状況で最も便利な方法は、次のような Lambda 式として指定することです。

var repo = new Repository<BankAccount>();
repo.FindById(account=>account.Id == 15);

Func を指定するその他の方法については、ここで説明します。

編集:最新のエラーを修正するには、リストとして結果が必要です。明示的なキャストを削除して、次を試してください。

accountRepository.FindAll(predicate).ToList();
于 2012-06-21T17:42:07.220 に答える