将存储库公开为 IQueryable

Ben*_*Ben 3 .net c# linq iqueryable

我想将存储库公开为“IQueryable”类型。

该存储库使用 Linq to NHibernate 与数据库进行通信。

谁能指出我的示例实现吗?

例如,我的存储库中相应的“GetEnumerator()”实现是什么样子?

编辑:

这样的事情合适吗?

public class MyTypeRepository : IEnumerable<MyType>
{        
    IEnumerator<MyType> IEnumerable<MyType>.GetEnumerator()
    {
        return Session.Linq<MyType>().GetEnumerator();
    }


    IEnumerator IEnumerable.GetEnumerator()
    {
        return ((IEnumerable<MyType>)this).GetEnumerator();
    }

}
Run Code Online (Sandbox Code Playgroud)

Jam*_*ran 5

这是一个糟糕的设计。

AnIQueryable是一个问题(在字典中查找“query”)。这就是您索要数据的方式。这是您应该提供给存储库的内容。

存储库应该返回答案——数据本身。

如果存储库返回 IQueryable,那么您几乎就不需要存储库了。

  • 数据“公开”为 IQueryable,例如实体框架将数据库表公开为 IQueryable。查看语句 `customers.Where(c =&gt; c.City == "London").Take(10).Average(c =&gt; c.Age)`。“customers”变量是完整的数据集。“Where”语句过滤原始数据并生成**新数据集**。该数据集通过“Take”和“Average”语句进一步缩小范围。事实上,整个语句*可能*转换为单个优化的 SQL 查询,*这*是一个实现细节。但如果你不同意,我们就不得不不同意。 (4认同)