我有一个名为 ICatalog
的接口,如下所示,每个 ICatalog
都有一个名称和一个方法,该方法将根据 Predicate<Item>
函数返回项目。
public interface ICatalog
{
string Name { get; }
IEnumerable<Item> GetItems(Predicate<Item> predicate);
}
一种特定的目录实现可以链接到各种格式的目录,例如XML或SQL数据库。
使用XML目录时,我会将整个XML文件反序列化到内存中,因此测试每个项目与谓词函数不会增加太多开销,因为它已经在内存中了。
但是,对于SQL实现,我不想将整个数据库内容检索到内存中,然后使用谓词函数过滤项目。相反,我希望找到一种方法将谓词传递给SQL服务器,或以某种方式将其转换为SQL查询。
这似乎是可以用Linq解决的问题,但我对它还不太熟悉。我的接口应该返回IQueryable吗?我现在不关心如何实际实现ICatalog的SQL版本。我只想确保我的接口将来可以支持它。