我需要限制从数据库返回的客户bo的数量,因为我正在搜索部分客户名称,目前我在搜索'a‘时得到了超过600个bo's。我想将其限制为20个。
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);
}发布于 2011-06-02 22:36:46
Till是在正确的轨道上,但没有给出正确的语法。代理用于从当前数据访问器加载集合,而不是用于创建新的集合。因此,代码应该是:
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):
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所必需的。希望这能有所帮助。
发布于 2011-06-02 21:18:57
我现在不能对此进行测试,但您应该可以通过使用LoadWithLimit()方法来进行测试。totalRecords变量将保存找到的总结果数,以防您想要包含一些信息,如“Showing20 of totalRecords results.”。
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);
}发布于 2011-06-03 03:05:12
安德鲁,你总是可以这样做的,看起来会更整洁一点,但确实涉及到解析CustomerName。
var totalRecords = 0;
Broker.GetBusinessObjectCollection<Customer>("CustomerName Like partialCustomerName ", "CustomerName", 0, 20, out totalRecords);https://stackoverflow.com/questions/6214905
复制相似问题