在使用LINQ存储库时使用Func T,bool的可能方法

时间:2012-06-21 17:33:49

标签: c# .net linq linq-to-sql repository-pattern

我发现了很多使用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);将无法正常工作

3 个答案:

答案 0 :(得分:3)

例如:

var repository = new MyRepository<Person>();
var personsOlderThan50 = repository.FindAll(p=>p.Age > 50);

答案 1 :(得分:2)

一个Func T,bool是一个委托,它接受一个通用参数T并返回一个bool。在您的情况下,您将使用像

这样的存储库
var repository = new MyRepository<BankAccount>;
var account = repository.FindByID(a=>a.AccountId == 10);

答案 2 :(得分:0)

有几种方法可以指定Func,它本质上是一个delegate,它接受​​一个参数并返回一个bool。

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

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

指定Func的其他方法最好用here来描述。

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

accountRepository.FindAll(predicate).ToList();