Linq to sql 嵌套linq到sql查询

Linq to sql 嵌套linq到sql查询,linq-to-sql,nested,Linq To Sql,Nested,我描述了数据库表的外观。所以,contacts表有一个字段是xml类型。该字段中存储的是公司文件名,我需要读取它。我用这种方式试过: var result = ( from contact in db.Contacts join user in db.Users on contact.CreatedByUserID equals user.UserID orderby contact.ContactID desce

我描述了数据库表的外观。所以,
contacts
表有一个字段是
xml
类型。该字段中存储的是公司文件名,我需要读取它。我用这种方式试过:

var result = (
    from contact in db.Contacts                             
    join user in db.Users on contact.CreatedByUserID equals user.UserID
    orderby contact.ContactID descending
    select new ContactListView
    {
        ContactID = contact.ContactID,
        FirstName = contact.FirstName,
        LastName = contact.LastName,
        Company = (
            from field in contact.XmlFields.Descendants("Company")
            select field.Value).SingleOrDefault().ToString()
    }).Take(10);
但我得到以下错误:

成员访问的“System.String Value” “System.Xml.Linq.XElement”不合法 正常型 'System.Collections.Generic.IEnumerable'1[System.Xml.Linq.XElement]

有什么解决办法吗

提前感谢,

Ile

这里的问题是LINQtoSQL试图将
子体
扩展方法和
XElement.Value
转换为SQL,但它当然失败了。您必须使用LINQ对对象进行最后一次转换。这将有助于:

Company = (
    from field in contact.XmlFields.Descendants("Company")
    select field.Value).SingleOrDefault().ToString()
var-temp=(
来自数据库中的联系人。联系人
在数据库中加入用户。contact.CreatedByUserID上的用户等于user.UserID
orderby contact.ContactID递减
选择新的
{
contact.ContactID、contact.FirstName、contact.LastName、contact.xml字段
})
.采取(10);
var tempArray=temp.ToArray();
可数结果=
从tempArray中的contact
让公司=
(来自contact.XmlFields.subjections(“公司”)中的字段)
选择field.Value)
选择新建ContactListView()
{
ContactID=contact.ContactID,
FirstName=contact.FirstName,
LastName=contact.LastName,
Company=Company==null?null:Company.ToString()
}).采取(10);

是的,就是这个。我永远不会独自去想:)虽然,这不是一个真正实用的解决方案,但重要的是它能起作用。谢谢;)
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);