Anonim bir türe yansıtabilirsiniz ve daha sonra ondan model türüne
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 });
}
Düzenleme : Bu soru çok ilgi gördüğü için biraz daha spesifik olacağım.
Doğrudan model türüne yansıtma yapamazsınız (EF kısıtlaması), bu yüzden bunun bir yolu yoktur. Tek yol, anonim tür (1. yineleme) ve ardından model tipine (2. yineleme) yansıtmaktır.
Varlıkları bu şekilde kısmen yüklediğinizde, bu öğelerin güncellenemeyeceğini, bu nedenle olduğu gibi ayrılmaları gerektiğini de unutmayın.
Bunun neden mümkün olmadığını asla tam olarak anlamadım ve bu konudaki cevaplar buna karşı güçlü nedenler vermiyor (çoğunlukla kısmen yüklü verilerden bahsediyor). Kısmen yüklü durumdaki varlığın güncellenememesi doğrudur, ancak daha sonra bu varlık ayrılır, bu nedenle bunları kaydetmeye yönelik yanlışlıkla girişimler mümkün olmaz.
Yukarıda kullandığım yöntemi düşünün: sonuç olarak hala kısmen yüklü bir model varlığımız var. Bu varlık ayrılmıştır.
Bu (var olma isteği) olası kodu düşünün:
return (from p in Context.Set<Product>()
where p.CategoryID == categoryID
select new Product { Name = p.Name }).AsNoTracking().ToList();
Bu aynı zamanda müstakil varlıkların bir listesi ile sonuçlanabilir, bu nedenle iki tekrarlama yapmamız gerekmez. Bir derleyici, AsNoTracking () 'in kullanıldığını görmek akıllıca olur, bu da ayrık varlıklara neden olur, böylece bunu yapmamıza izin verebilir. Bununla birlikte, AsNoTracking () atlanmışsa, istediğimiz sonuç hakkında yeterince spesifik olmamız gerektiği konusunda bizi uyarmak için şu anda atılanla aynı istisnayı atabilir.