आप गुमनाम प्रकार में प्रोजेक्ट कर सकते हैं, और फिर इसे मॉडल प्रकार से
public IEnumerable<Product> GetProducts(int categoryID)
{
return (from p in Context.Set<Product>()
where p.CategoryID == categoryID
select new { Name = p.Name }).ToList()
.Select(x => new Product { Name = x.Name });
}
संपादित करें : मैं थोड़ा अधिक विशिष्ट होने जा रहा हूं क्योंकि इस प्रश्न पर बहुत ध्यान दिया गया।
आप सीधे मॉडल प्रकार (ईएफ प्रतिबंध) में प्रोजेक्ट नहीं कर सकते हैं, इसलिए इसके आसपास कोई रास्ता नहीं है। एकमात्र तरीका गुमनाम प्रकार (1 पुनरावृत्ति) में प्रोजेक्ट करना है, और फिर मॉडल प्रकार (2 पुनरावृत्ति) के लिए।
कृपया इस बात से भी अवगत रहें कि जब आप आंशिक रूप से संस्थाओं को इस तरह से लोड करते हैं, तो उन्हें अपडेट नहीं किया जा सकता है, इसलिए उन्हें अलग रहना चाहिए, जैसे वे हैं।
मैं कभी भी पूरी तरह से समझ नहीं पाया कि यह क्यों संभव नहीं है, और इस धागे के जवाब इसके खिलाफ मजबूत कारण नहीं देते हैं (ज्यादातर आंशिक रूप से भरी हुई बात के बारे में बोलते हैं)। यह सही है कि आंशिक रूप से भरी हुई राज्य इकाई को अपडेट नहीं किया जा सकता है, लेकिन फिर, इस इकाई को अलग कर दिया जाएगा, इसलिए उन्हें बचाने के लिए आकस्मिक प्रयास संभव नहीं होंगे।
ऊपर दी गई विधि पर विचार करें: हमारे पास अभी भी एक आंशिक रूप से भरी हुई मॉडल इकाई है। यह इकाई अलग है।
इस पर विचार करें (इच्छा-से-मौजूद) संभव कोड:
return (from p in Context.Set<Product>()
where p.CategoryID == categoryID
select new Product { Name = p.Name }).AsNoTracking().ToList();
इससे अलग-अलग संस्थाओं की एक सूची भी बन सकती है, इसलिए हमें दो पुनरावृत्तियों की आवश्यकता नहीं होगी। एक कंपाइलर यह देखने के लिए स्मार्ट होगा कि AsNoTracking () का उपयोग किया गया है, जिसके परिणामस्वरूप अलग-अलग निकाय होंगे, इसलिए यह हमें ऐसा करने की अनुमति दे सकता है। यदि, हालांकि, असनोक्रैकिंग () को छोड़ दिया गया था, तो यह उसी अपवाद को फेंक सकता है जैसा कि अब फेंक रहा है, हमें चेतावनी देने के लिए कि हमें उस परिणाम के बारे में विशिष्ट होना चाहिए जो हम चाहते हैं।