1

这是我的场景:

我已经在我的 C# 框架中实现了集合逻辑。集合可以包含大量对象,在最坏的情况下甚至可能多达 100 万个。假设集合只包含称为 Doc 的对象列表。由于潜在的大量对象,我想让开发人员选择如何创建和使用集合。

对于较小的集合,开发人员只需创建一个新集合并将文档对象添加到集合中即可。正常的集合逻辑可用,例如联合、相交等。然后,开发人员可以在任何时候将集合与我的 OR 层一起保存,其中集合将具有分配给它的主 ID。

对于保存在数据库中的非常大的集合,我想绕过从数据库中提取 doc 对象的 ID,然后通过允许在 SQL 2008 CLR 中操作集合来将 ID 保存回集合对象的过程. 我想要一个简单的函数,比如这个签名:

public void AddSetMembers(int setID, Expression<Func<Doc, bool>> Where)

这将允许开发人员将任意文档添加到与表达式匹配的集合中,而无需从数据库中提取所有 ID,其唯一目的是将它们添加到集合中。

我的问题是如何最好地在存储过程中处理此实现?我可以以某种方式将 lambda 传递给存储过程吗?我曾考虑过实现一个 IDoc 接口并将其加载到 CLR 中并具有如下签名:

public void AddSetMembers(int setID, Expression<Func<IDoc, bool>> Where)

但是我仍然需要将 lambda 传递给 SP。我想让框架足够灵活,以便开发人员可以使用不同的条件来创建集合。

4

1 回答 1

1

您可以将 SQL 中的字符串传递给包含 lambda 的 SQL CLR 方法。然后使用框架的编译工具将该字符串编译成函数/方法,然后调用它。

于 2009-01-19T23:36:13.973 回答