首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Habanero中,如何限制从数据库返回的对象数量

在Habanero中,如何限制从数据库返回的对象数量
EN

Stack Overflow用户
提问于 2011-06-02 21:07:49
回答 3查看 62关注 0票数 1

我需要限制从数据库返回的客户bo的数量,因为我正在搜索部分客户名称,目前我在搜索'a‘时得到了超过600个bo's。我想将其限制为20个。

代码语言:javascript
复制
    public IEnumerable<Customer> FindCustomers(string partialCustomerName)
    {
        if (string.IsNullOrEmpty(partialCustomerName)) 
          throw new ArgumentException("partialCustomerName must be at least one character long");
        var criteria = Criteria.Create<Customer, string>(cust =>   cust.CustomerName, Criteria.ComparisonOp.Like, partialCustomerName + "%");
        return Broker.GetBusinessObjectCollection<Customer>(criteria);
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-02 22:36:46

Till是在正确的轨道上,但没有给出正确的语法。代理用于从当前数据访问器加载集合,而不是用于创建新的集合。因此,代码应该是:

代码语言:javascript
复制
public IEnumerable<Customer> FindCustomers(string partialCustomerName)
{
    if (string.IsNullOrEmpty(partialCustomerName)) 
      throw new ArgumentException("partialCustomerName must be at least one character long");

    var criteria = Criteria.Create<Customer, string>(cust =>   cust.CustomerName, Criteria.ComparisonOp.Like, partialCustomerName + "%");
    int totalRecords;
    var col = new BusinessObjectCollection<Customer>();
    col.LoadWithLimit(criteria, "CustomerName", 0, 20, ref totalRecords);
    return col;
}

这应该就行了!请把答案判给蒂尔,而不是我。他做的研究最多。我只是更正了语法:)

编辑:在下面关于丑陋的API的评论之后,我将包括对方法的建议更改,以使其看起来更干净(感谢您的建议@GloryDev):

代码语言:javascript
复制
public IEnumerable<Customer> FindCustomers(string partialCustomerName)
{
    if (string.IsNullOrEmpty(partialCustomerName)) 
      throw new ArgumentException("partialCustomerName must be at least one character long");
    var col = new BusinessObjectCollection<Customer>();
    col.LoadWithLimit("CustomerName Like " + partialCustomerName + "%", "CustomerName", 20);
    return col;
}

第二个参数是排序依据的字段,这是有限制的fetch所必需的。希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2011-06-02 21:18:57

我现在不能对此进行测试,但您应该可以通过使用LoadWithLimit()方法来进行测试。totalRecords变量将保存找到的总结果数,以防您想要包含一些信息,如“Showing20 of totalRecords results.”。

代码语言:javascript
复制
public IEnumerable<Customer> FindCustomers(string partialCustomerName)
{
    if (string.IsNullOrEmpty(partialCustomerName)) 
      throw new ArgumentException("partialCustomerName must be at least one character long");

    var criteria = Criteria.Create<Customer, string>(cust =>   cust.CustomerName, Criteria.ComparisonOp.Like, partialCustomerName + "%");
    int totalRecords;
    return Broker.GetBusinessObjectCollection<Customer>().LoadWithLimit(criteria, 0, 20, ref totalRecords);
}
票数 2
EN

Stack Overflow用户

发布于 2011-06-03 03:05:12

安德鲁,你总是可以这样做的,看起来会更整洁一点,但确实涉及到解析CustomerName。

代码语言:javascript
复制
        var totalRecords = 0;
        Broker.GetBusinessObjectCollection<Customer>("CustomerName Like partialCustomerName ", "CustomerName", 0, 20, out totalRecords);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6214905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档