web-dev-qa-db-ja.com

Linqクエリで文字列を比較する方法

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

私のlinqクエリは

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

とemが例外を取得します

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

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();
6
MBasit

これを試して :

var query = from c in customers where c.CustomerID.Equals(txtSerchId.Text) select c;
6
Ovais Khatri

あなたのコメントからの引用「私はユーザーが入力した値を私が持っているオブジェクトのコレクションと比較して、ユーザーが入力したIDよりも小さいまたは大きい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);

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

0
Bazzz

シンプルにする:

  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
user2905764
 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

*これは私のために働いた