2012-05-04 12 views
5

तुलनाटो मेरे लिए यहां काम नहीं कर रहा है।लिंक क्वेरी में स्ट्रिंग्स की तुलना कैसे करें

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

'txtSerchId.Text' में मूल्य क्या है और उम्मीद उत्पादन क्या है? आप 'ग्राहक आईडी' की तुलना मनमानी स्ट्रिंग से कर रहे हैं ???? – Bazzz

+0

txtSerchId टेक्स्टफिल्ल्ड (विंडोफॉर्म कंटोरल) है, मैं उपयोगकर्ता द्वारा दर्ज की गई वस्तुओं से कम से कम कह सकता हूं या आप उपयोगकर्ता द्वारा दर्ज किए गए से अधिक कह सकते हैं। – MBasit

+0

और यह 'टेक्स्ट' है? और इस पाठ की तुलना 'ग्राहक आईडी' से करने के लिए क्या समझदारी है? शायद मैं सिर्फ आपकी व्यावसायिक आवश्यकता को समझ नहीं रहा हूं। – Bazzz

उत्तर

5

इस प्रयास करें:

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

से बाहर कर सकते हैं I objA.Equals (objB) के बजाय स्ट्रिंग.क्वल्स (ओबीजेए, ओबीजेबी) का सुझाव देंगे। – Tilak

+0

याह! मैं बस उल्लेख कर रहा था कि जब मैं बराबर विधि का उपयोग करता हूं (जो केवल जांच के लिए जरूरी नहीं है) जो कि बहुत अच्छा काम करता है, और यह मेरे लिए अधिक निराशाजनक है ........ – MBasit

0

अपनी टिप्पणी से हवाला देते हुए "मैं वस्तुओं मेरे पास है, ग्राहकों की तुलना में या आप अधिक से अधिक कह सकते हैं कम आईडी वाले खोज करने के लिए का संग्रह करने के लिए उपयोगकर्ता दर्ज किया गया मान की तुलना कर रहा हूँ उपयोगकर्ता द्वारा दर्ज की गई। "

"से अधिक" के लिए इस प्रयास करें:

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

ध्यान दें कि यह काफी है I इसके रूप में यह पहले डेटाबेस से सभी रिकॉर्ड खींचता है और फिर उन्हें अपनी स्ट्रिंग तुलना के अनुसार फ़िल्टर करता है। लेकिन ईमानदार होने के लिए मुझे एक बेहतर तरीका नहीं पता है, इसलिए यह एक कोशिश के लायक हो सकता है।

+0

ग्राहक आईडी हमेशा संख्यात्मक नहीं होगी, वास्तव में कभी नहीं। ..... – MBasit

+0

दिलचस्प, तो आप तय करते हैं कि कोई निश्चित ग्राहक आईडी दूसरे से बड़ा है या नहीं? – Bazzz

+0

बिल्कुल! वर्णमाला क्रम के आधार पर अधिक, तुलनात्मक विधि यह है कि लेकिन यह LINQ प्रतियोगिता में काम नहीं कर रहा है वाई पता नहीं ??? तुलना करें स्ट्रिंग क्लास की विधि एक स्ट्रिंग तर्क लेती है और इसे 'इस' (कॉलिंग) ऑब्जेक्ट रिटर्न के साथ तुलना करें: 0 बराबर -1 यदि तर्क अधिक है तो e..g ("c" .CompareTo (" डी ")) 1 यदि तर्क कम ई..जी (" सी "कॉम्पैयर टू (" ए ")) – 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 

* यह मेरे लिए काम किया

संबंधित मुद्दे