2010-05-17 200 views
3
​​

Here我描述了我的數據庫表什麼樣子。所以,contacts表有一個字段是xml類型。在該字段中存儲公司文件名,我需要閱讀它。我嘗試了用這種方式:嵌套的LINQ到SQL查詢

Company = (
    from field in contact.XmlFields.Descendants("Company") 
    select field.Value).SingleOrDefault().ToString() 

,但我得到以下錯誤:

Member access 'System.String Value' of 'System.Xml.Linq.XElement' not legal on type 'System.Collections.Generic.IEnumerable`1[System.Xml.Linq.XElement].

這個任何解決方案?

由於提前,

回答

3

這裏的問題是,LINQ to SQL的嘗試到Descendants擴展方法和XElement.Value轉換爲SQL,但它當然會失敗。你將不得不使用LINQ to Objects來完成最後一次轉換。這將工作:

var temp = (
    from contact in db.Contacts        
    join user in db.Users on contact.CreatedByUserID equals user.UserID 
    orderby contact.ContactID descending 
    select new 
    { 
     contact.ContactID, contact.FirstName, contact.LastName, contact.XmlFields 
    }) 
    .Take(10); 

var tempArray = temp.ToArray(); 

IEnumerable<ContactListView> result = 
    from contact in tempArray 
    let company = 
     (from field in contact.XmlFields.Descendants("Company") 
     select field.Value).SingleOrDefault() 
    select new ContactListView() 
    { 
     ContactID = contact.ContactID, 
     FirstName = contact.FirstName, 
     LastName = contact.LastName, 
     Company = company == null ? null : company.ToString() 
    }).Take(10); 
+0

是的,就是這樣。我從來沒有想過獨自一人:)雖然,這不是真正實用的解決方案,但重要的是它的工作原理。謝謝 ;) – 2010-05-18 07:40:58