2012-05-04 54 views
5

CompareTo không hoạt động ở đây đối với tôi.Cách so sánh các chuỗi trong Truy vấn LINQ

truy vấn LINQ của tôi là

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

và em nhận được một ngoại lệ

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

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

My mã là một cái gì đó như thế này

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

ngoại lệ là tại dòng này

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

giá trị trong 'txtSerchId.Text' là gì và sản lượng dự kiến ​​là bao nhiêu? Bạn đang so sánh 'CustomerID' với một chuỗi tùy ý ???? – Bazzz

+0

txtSerchId là TextFeild (WindowForm Contorl) tôi đang so sánh giá trị đã nhập của người dùng với tập hợp các đối tượng tôi có, để tìm kiếm Khách hàng có ID nhỏ hơn hoặc bạn có thể nói lớn hơn số người dùng đã nhập. – MBasit

+0

và đó là 'Văn bản' là? Và ý nghĩa gì khi so sánh văn bản này với 'CustomerID'? Có lẽ tôi chỉ không hiểu yêu cầu kinh doanh của bạn. – Bazzz

Trả lời

5

thử điều này:

var query = from c in customers where c.CustomerID.Equals(txtSerchId.Text) select c; 
+1

Tôi sẽ đề nghị String.Equals (objA, objB) thay vì objA.Equals (objB). – Tilak

+0

yah! tôi đã đề cập đến rằng khi tôi sử dụng phương pháp Equals (đó không phải là yêu cầu chỉ để kiểm tra) mà hoạt động tuyệt vời, và điều này là bực bội cho tôi ........ – MBasit

0

Trích dẫn từ bình luận của bạn "tôi đang so sánh sử dụng giá trị nhập vào bộ sưu tập của các đối tượng tôi có, để tìm kiếm khách hàng có ID nhỏ hơn hoặc bạn có thể nói lớn hơn so với người dùng đã nhập. "

thử này cho "lớn hơn":

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

Update như biết thêm thông tin đã được thêm vào trong ý kiến:

Hãy thử điều này:

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

Lưu ý rằng đây là bao la không hiệu quả vì nó kéo TẤT CẢ các bản ghi từ cơ sở dữ liệu và THEN lọc chúng theo so sánh chuỗi của bạn. Nhưng thành thật mà nói tôi không biết một cách tốt hơn vì vậy đây có thể là một giá trị thử.

+0

CustomerID sẽ không được số luôn, thực sự không bao giờ. ..... – MBasit

+0

Thú vị, bạn có quyết định liệu một CustomerID nhất định có lớn hơn một CustomerID khác không? – Bazzz

+0

Chính xác! lớn hơn trên cơ sở thứ tự chữ cái, đây là phương pháp CompareTo nào đơn giản là Nhưng nó không hoạt động trong cuộc thi LINQ Không biết Y ??? Phương thức CompareTo của lớp chuỗi nhận một đối số chuỗi và so sánh nó với đối tượng 'this' (gọi) trả về như sau: 0 nếu bằng -1 nếu đối số lớn hơn e..g ("c" .CompareTo (" d ")) 1 nếu đối số ít e..g (" c ".CompareTo (" a ")) – MBasit

0

Go đơn giản:

  1. Đối với Bình đẳng:

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

  2. Đối Greater: where c.CustomerID >= Convert.ToInt32(txtSerchId.Text)

  3. Đối với ít: 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 

* Đây làm việc cho tôi

Các vấn đề liên quan