LINQ

2010-06-24 19 views
7

içinde ek değerler içeren tam nesne projeksiyonu Bir nesnenin tüm özelliklerini yansıtmak ve hepsini özel olarak listelemeksizin, daha fazlasını eklemek mümkün müdür. Örneğin, yerine bunu yapmanın:LINQ

var projection = from e in context.entities 
        select new QuestionnaireVersionExtended 
        { 
         Id = e.Id, 
         Version = e.Version, 
         CreationDate = e.CreationDate, 
         ... 
         many more properties 
         ... 
         NumberOfItems = (e.Children.Count()) 
        }; 

böyle bir şey yapabilir: aynı adla e kadar her mallarını almak ve üzerine "NumberOfItems" özelliği katacak

var projection = from e in context.entities 
        select new QuestionnaireVersionExtended 
        { 
         e, 
         NumberOfItems = (e.Children.Count()) 
        }; 

o?

+0

Bu harika olurdu ... ancak, sadece "e" yerine "e" gibi bir şey yazabilirim. Özellikle anonim tip –

cevap

3

Hayır, bu mümkün değil. Bir LINQ ifadesinin select cümlesi, bir değer üreten normal C# ifadelerine izin verir. Nesne başlatıcısı aracılığıyla bir nesneyi bu şekilde bir şablon stili içinde oluşturacak C# yapısı yoktur. Özellikleri listelemeniz veya açık bir kurucu kullanmanız gerekir.

+0

@Reed için yararlı olacaktır, bunu kaçırdı. Cevabımı günceller. – JaredPar

1

Eğer varlık artı NumberOfItems alır QuestionnaireVersionExtended için bir kurucu eklerseniz, doğrudan yapıcısını kullanabilirsiniz:

yoktur
var projection = from e in context.entities 
    select new QuestionnaireVersionExtended(e, NumberOfItems = (e.Children.Count())); 

Ancak derleyici "söylemenin bir yolu sadece özelliklerin tümünü kopyalamak açıkça. "

+0

Jarod'ın işaret ettiği gibi, özelliklerin listelenmesi kaçınmak için uğraştığım şey, çünkü bunların tonları var. – CodeGrue

1

Bunu başarabilmenizin birkaç yolu vardır ancak bunların hepsi kabuslar olacaktır.

1.) Ancak bu size uzak almaya çalışırken budur (bir kurucu Aşırı yük ve orada tüm değerleri kopyalamak.

2.) Kullanım yansıması (birçok kötü yan etkisi üzerinde özelliklerini kopyalamak için, önerilmez)) DEKORATÖR MODELİNİ KULLANIN 3.). Özgün sınıfa değerler eklediniz gibi görünüyor, bu yüzden bir dekoratör kullanmak için mükemmel bir zaman olacağını düşünüyorum. Bu aynı zamanda özellikleri eklendikçe kaçırılmayacaklar. Derleme kırılırdı, ancak bu nesne, dekore edilen nesne sealed ise mükemmel değildir.