2009-01-08 4 views
5

को LINQ के लिए बयान में वहाँ एक वस्तुओं के लिए LINQ में बयान में किसी SQL के बराबर है?वस्तुओं

उत्तर

16

हाँ - Contains

var desiredNames = new[] { "Jon", "Marc" }; 

var people = new[] 
{ 
    new { FirstName="Jon", Surname="Skeet" }, 
    new { FirstName="Marc", Surname="Gravell" }, 
    new { FirstName="Jeff", Surname="Atwood" } 
}; 

var matches = people.Where(person => desiredNames.Contains(person.FirstName)); 

foreach (var person in matches) 
{ 
    Console.WriteLine(person); 
} 

(LINQ में यह एक "में" क्वेरी के रूप में समाप्त होता है SQL करने के लिए।)

ध्यान दें कि LINQ में करने के लिए ऑब्जेक्ट्स ऊपर वास्तव में बहुत ही कुशल नहीं है। आप के साथ बेहतर होगा एक में शामिल होने: (। यह अभी भी निश्चित रूप से डॉट नोटेशन के साथ किया जा सकता है, लेकिन यह कुछ हद तक मेसियर किया जा रहा समाप्त होता है)

var matches = from person in people 
       join name in desiredNames on person.FirstName equals name 
       select person; 

+0

धन्यवाद! आपकी प्रतिष्ठा आपको पहले करती है ;-) –

+0

आंतरिक शामिल क्यों नहीं किया जाता है? तुम्हें पता है कि अगर लोगों को 10 रिकॉर्ड होते हैं और desiredNames शामिल 2, यह भले ही तथ्य यह है कि मिलान हो जाता है या नहीं की है, पृष्ठभूमि में 20 बार पुनरावृति होगी। – Pankaj

+0

@PankajGarg: कृपया इस तरह परेशान नहीं है - मैं हमेशा तुरंत प्रतिक्रिया करने में सक्षम हो नहीं होगा। क्या आपने मेरी पोस्ट के निचले हिस्से को पढ़ा था जो स्पष्ट रूप से कहा था कि LINQ से ऑब्जेक्ट्स में एक जॉइन बेहतर होगा? –

0

मैं इनर इस में शामिल हों के लिए जाना होगा संदर्भ। अगर मैंने contains का उपयोग किया होता, तो यह केवल दो मैचों के बावजूद 6 गुना होगा। मैं बस यहां जोर देना चाहता हूं कि मैं भविष्यवाणी के बजाय जॉइन के लिए जाऊंगा।

var desiredNames = new[] { "Pankaj" }; 

var people = new[] 
{ 
    new { FirstName="Pankaj", Surname="Garg" }, 
    new { FirstName="Marc", Surname="Gravell" }, 
    new { FirstName="Jeff", Surname="Atwood" } 
}; 

var records = (from p in people join filtered in desiredNames on p.FirstName equals filtered select p.FirstName).ToList();