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];
    }

注意:列出 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,它本质上是一个delegate接受一个参数并返回一个布尔值的方法。

大多数情况下最方便的方法是将其指定为 Lambda 表达式,例如:

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

指定 Func 的其他方法最好在此处进行描述。

编辑:要修复您的最新错误,您需要将结果作为列表。删除您的显式演员并尝试:

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