C# में IEnumerable<T> या IQueryable<T> लौटाना: क्या अंतर है और क्या चुनें?
सभी को नमस्ते! मैं एक शुरुआती C# डेवलपर हूँ, Entity Framework और LINQ के साथ काम करता हूँ। अक्सर अपने सहकर्मियों के कोड में देखता हूँ कि वे मेथड से कभी `IEnumerable` तो कभी `IQueryable` लौटाते हैं। पहले मैंने सोचा कि ये आपस में बदले जा सकते हैं, लेकिन बाद में मैंने अजीब व्यवहार देखा।
यहाँ एक उदाहरण है। मेरे पास एक मेथड है जो ऑर्डर की सूची प्राप्त करता है:
```csharp
public IEnumerable GetOrders()
{
using (var db = new MyDbContext())
{
return db.Orders.Where(o => o.IsActive);
}
}
```
फिर मैं इसे कॉल करता हूँ और अतिरिक्त फ़िल्टरिंग लागू करता हूँ:
```csharp
var orders = GetOrders().Where(o => o.Total > 100).ToList();
```
मुझे उम्मीद थी कि डेटाबेस में दो शर्तों (`IsActive = true AND Total > 100`) के साथ एक SQL क्वेरी जाएगी, लेकिन profiler दिखाता है कि पहले सभी सक्रिय ऑर्डर चुने जाते हैं, और फिर `Total` पर फ़िल्टरिंग एप्लिकेशन मेमोरी में होती है! यह बहुत धीमा है अगर ऑर्डर बहुत सारे हों।
और अगर मैं रिटर्न टाइप को `IQueryable` में बदल दूँ, तो सब कुछ सही से काम करता है — SQL में जनरेट होता है