1

部分的な顧客名を検索しているため、データベースから返される顧客の bo の数を制限する必要があります。現在、「a」を検索すると 600 以上の bo が得られます。これを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);
    }
4

3 に答える 3

2

現在これをテストすることはできませんが、LoadWithLimit() メソッドを使用してテストできるはずです。totalRecords 変数には、「totalRecords の結果を 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 + "%");
    int totalRecords;
    return Broker.GetBusinessObjectCollection<Customer>().LoadWithLimit(criteria, 0, 20, ref totalRecords);
}
于 2011-06-02T13:18:56.957 に答える
1

Andrew あなたはいつでもこれを行うことができますが、これは少しきれいに見えますが、CustomerName の解析が必要です。

        var totalRecords = 0;
        Broker.GetBusinessObjectCollection<Customer>("CustomerName Like partialCustomerName ", "CustomerName", 0, 20, out totalRecords);
于 2011-06-02T19:05:11.760 に答える
1

ティルは正しい軌道に乗っていますが、正しい構文を示していません。ブローカは、新しいデータ アクセサを作成するためではなく、現在のデータ アクセサからコレクションをロードするために使用されます。したがって、コードは次のようになります。

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に関する以下のコメントの後、私はそれをよりきれいに見せるために提案された変更をメソッドに含めます(あなたの提案@GloryDe​​vに感謝します):

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;
}

2 番目のパラメーターは、順序付けの基準となるフィールドです。これは、制限のあるフェッチを意味のあるものにするために必要です。お役に立てれば。

于 2011-06-02T14:36:45.717 に答える