2010-05-17 13 views
7

IEnumerable dönüştürme ve belki bu konuda yaşıyorum olası bir çözüm ... Ben yerel kuruluşlar içine bir veritabanından bazı verileri çekmek için LINQ to SQL kullandıkbirileri ışık tutabilir umut EntitySet

. Bir alışveriş sepeti sisteminden ürünlerdir. Bir ürün KitGroups (bir EntitySet (System.Data.Linq.EntitySet) içinde depolanır. KitGroups KitItems koleksiyonlarını içerir ve KitItems iç içe geçmiş ürünler (özgün ürün türüne bağlanan) içerebilir. özyineleşmiş)

Bu varlıklardan XML'e LINQ kullanarak XML yapıyorum - hepsi burada iyi - XML'im güzel görünüyor, iç içe ürün üretmek için kendini çağıran "GenerateProductElement" işlevini çağırıyor. Harika şeyler

Ancak, burada sıkıştığım yer ... Şimdi bu XML'i orijinal nesnelere (Linq'den SQL'e otomatik olarak oluşturulmuş) geri döndürmeye çalışıyorum ... ve buradaki problem yatıyor. Linq tO Sql koleksiyonlarımı bekliyor EntitySet koleksiyonları olmakla birlikte, Linq to Xml (ki ben tyr deserailise için kullanmak için) IEnumerable döndürüyor.

2 arasında bir kaç yol almayı deneyimledim, ancak hiçbir şey işe yaramıyor gibi görünüyor ... Ben sadece elle Kitlesel KitTemellerini belirlemek için bazı funky döngüler ve koşullarla elimden geldiğimi düşünmeye başlıyorum. ... vb), ancak gerçekten oldukça zor ve bu kod oldukça çirkin olması muhtemel, bu yüzden bu problem için daha şık bir çözüm bulmayı çok isterim.

Herhangi bir öneriniz var mı? İşte

bir kod parçacığı var:

private Product GenerateProductFromXML(XDocument inDoc) 
{ 
    var prod = from p in inDoc.Descendants("Product") 
     select new Product 
     { 
      ProductID = (int)p.Attribute("ID"), 
      ProductGUID = (Guid)p.Attribute("GUID"), 
      Name = (string)p.Element("Name"), 
      Summary = (string)p.Element("Summary"), 
      Description = (string)p.Element("Description"), 
      SEName = (string)p.Element("SEName"), 
      SETitle = (string)p.Element("SETitle"), 
      XmlPackage = (string)p.Element("XmlPackage"), 
      IsAKit = (byte)(int)p.Element("IsAKit"), 
      ExtensionData = (string)p.Element("ExtensionData"), 
     }; 

    //TODO: UUGGGGGGG Converting b/w IEnumerable & EntitySet 
    var kitGroups = (from kg in inDoc.Descendants("KitGroups").Elements("KitGroup") 
        select new KitGroup 
           { 
            KitGroupID = (int) kg.Attribute("ID"), 
            KitGroupGUID = (Guid) kg.Attribute("GUID"), 
            Name = (string) kg.Element("Name"), 
            KitItems = // THIS IS WHERE IT FAILS - "Cannot convert source type IEnumerable to target type EntitySet..." 
             (from ki in kg.Descendants("KitItems").Elements("KitItem") 
             select new KitItem 
                { 
                 KitItemID = (int) ki.Attribute("ID"), 
                 KitItemGUID = (Guid) ki.Attribute("GUID") 
                }); 
           }); 

    Product ImportedProduct = prod.First(); 

    ImportedProduct.KitGroups = new EntitySet<KitGroup>(); 
    ImportedProduct.KitGroups.AddRange(kitGroups); 

    return ImportedProduct; 
} 
enter code here 

Ben SQL burada belirtilen tüm varlıklar (Ürün, KitGroup, KitItem, vs) Linq tarafından üretildiğini eklemek gerekir - hayır haritalama ile geri başka kuruluşlara (alışveriş sepeti, bu bağlamda sadece xml ve veri tabanına serileştirme/serileştirme aracı olarak varlıkları kullanırlar.Yaptığım işlevsellik bir ürünü tüm kit grupları, kitItems ve Bir ortamdan iç içe geçmiş ürünler ve başka bir ürüne içe aktarma

cevap

17

Aşağıdaki bağlantıyı faydalı bulabilirsiniz:

http://social.msdn.microsoft.com/Forums/en-US/linqprojectgeneral/thread/58c4dcf8-2d89-4a3c-bb30-58c7c15df04b


DÜZENLEME: Yukarıdaki bağlantı kopacak durumda, çözüm

public static EntitySet<T> ToEntitySet<T> (this IEnumerable<T> source) where T : class 
{ 
    var es = new EntitySet<T>(); 
    es.AddRange (source); 
    return es; 
} 

Alt sorgu o zaman evet .ToEntitySet()

... 
(from ki in kg.Descendants("KitItems").Elements("KitItem") 
select new KitItem 
{ 
    KitItemID = (int) ki.Attribute("ID"), 
    KitItemGUID = (Guid) ki.Attribute("GUID") 
}).ToEntitySet(); 
... 
+0

Ah kullanabilirsiniz uzatma yöntemini oluşturmak, Tam olarak neyim peşindeyim ... teşekkürler heav Jinal! – Jeeby

+0

Bana da yardımcı oldu, teşekkürler! –

+0

Teşekkürler dostum, sen beni kurtardın. Çağlardan beri aynı sorunla uğraşıyordum ... –

İlgili konular