2012-05-04 13 views
5

CompareToはここでは機能しません。Linqの文字列を比較する方法

私のLINQクエリは

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

で、EMは例外

////// EXCEPTION ///////////

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(); 
+0

'txtSerchId.Text'の値が何であると予想される出力は何である私のために働きましたか?あなたは 'CustomerID'を任意の文字列と比較していますか? – Bazzz

+0

txtSerchIdはTextFeild(WindowForm Contorl) 私はユーザーが入力した値と比較して、IDの値が小さい顧客を検索するか、ユーザーが入力した値より大きいと言うことができます。 – MBasit

+0

、それは 'Text'ですか?そして、このテキストを「CustomerID」と比較するのにどのような意味がありますか?たぶんあなたのビジネス要件を理解していないだけかもしれません。 – Bazzz

答えて

5

これを試してみてください。

あなたのコメント「私は以下のIDを持つ顧客を検索するために、持っているか、あなたはそれ以上言うことができるオブジェクトのコレクションにユーザが入力した値を比較していますから引用
var query = from c in customers where c.CustomerID.Equals(txtSerchId.Text) select c; 
+1

私はobjA.Equals(objB)の代わりにString.Equals(objA、objB)を提案します。 – Tilak

+0

yah!私は、Equalsメソッド(それはチェックのための要件ではありません)を使用すると素晴らしいことを言及するだけでした。これは私にとってもっと不満です。 – MBasit

0

ユーザーによって入力されたものよりも。

"より大きい" のためにこれを試してみてください。

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

更新もっとINFOMATIONがコメントで追加されているよう:

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

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

+0

CustomerIDは常に数値ではなく、実際には決してありません。 ..... – MBasit

+0

面白いことに、あなたは特定のCustomerIDが別のものよりも大きいかどうかを決定しますか? – Bazzz

+0

まさに!アルファベット順に基づいて、これはCompareToメソッドが単に行うものです LINQコンテストでは動作しません Yを知らないのですか? 文字列クラスのCompareToメソッドは、1つの文字列引数をとり、これと 'this'(呼び出し元)オブジェクトを比較します。 等しい場合は -1引数が大きい場合はe..g( "c" .CompareTo( " d ")) 引数がe..g(" c ".CompareTo(" a "))より小さい場合は – MBasit

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)

0
var List = (from t in ObjCon.TableName 
          where t.GameDate.Value.CompareTo(GameDate) >= 0 
          join t1 in ObjCon.Teams on t.Home equals t1.TeamId 
          where t1.SportId == 3 

*これは