8

CompareTo はここでは機能しません。

私のlinqクエリは

var result = from c in customers 
             where c.CustomerID.CompareTo(txtSerchId.Text) >= 0 
             select` c;

そして例外が発生します

//////例外///////////

System.ArgumentException was caught
Message=Value does not fall within the expected range.

私のコードはこのようなものです

var result = 
    from c in customers 
    where c.CustomerID.CompareTo(txtSerchId.Text) >= 0 
    select c;

if (result != null)
{
    IEnumerator<Customer> resultEnum = result.GetEnumerator();
    while (resultEnum.MoveNext())
    {
        Customer c = (Customer)resultEnum.Current;
        addToDataSet(Guid.NewGuid().ToString(), c);
    }
    ShowResult();
}
else
{
    MessageBox.Show("No Customer found within criteria");
}

例外はこの行にあります

IEnumerator<Customer> resultEnum = result.GetEnumerator();
4

4 に答える 4

9

これを試して :

var query = from c in customers where c.CustomerID.Equals(txtSerchId.Text) select c;
于 2012-05-04T12:07:26.783 に答える
0

あなたのコメントから引用すると、「ユーザーが入力した値を私が持っているオブジェクトのコレクションと比較して、ユーザーが入力したものよりも小さい、または大きいと言うことができるIDを持つ顧客を検索しています。」

「より大きい」に対してこれを試してください:

int customerId = int.Parse(txtSerchId.Text);
if (customerId > 0)
{
   var result = from c in customers where c.CustomerID > customerId select c;
}

コメントに追加情報が追加されたときに更新します。

これを試して:

customers.ToList().Where(c => c.CustomerID.CompareTo(txtSerchId.Text) >= 0);

これは、最初にデータベースからすべてのレコードを取得し、次に文字列比較に従ってそれらをフィルタリングするため、非常に非効率的であることに注意してください。しかし、正直なところ、私はより良い方法を知らないので、これは試してみる価値があるかもしれません.

于 2012-05-04T12:15:46.597 に答える
0

シンプルに:

  1. 平等の場合:

    var result = from c in customers where c.CustomerID ==Convert.ToInt32(txtSerchId.Text) select c;

  2. 大きい場合:where c.CustomerID >= Convert.ToInt32(txtSerchId.Text)

  3. 少ない場合: where c.CustomerID <= Convert.ToInt32(txtSerchId.Text)

于 2013-10-26T07:09:21.193 に答える