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