1
var xEle = new XElement("ContentDetails",
            from emp in _lstContents
            select new XElement("Contents",
                        new XAttribute("key", emp.Key),
                        new XAttribute("PublishedDate", emp.PublishedDate),
                        new XAttribute("FilePathURL", emp.FilePathURL),
                        new XAttribute("ID", emp.TitleID),
                        new XAttribute("ContentName", emp.Name)
                        ));

_lstContents 包含整个记录。我需要通过 LinQ 操作来构建 XmlDocument 我知道它可以实现并且我做到了。这是我所做的示例 XML:

<ContentDetails>
  <Contents ContentName="Sample Project Plan SOW" ID="3"
        FilePathURL="http://192.168.30.59/contentraven/Uploads/Custom_View_LLC/EncryptedFile/zsg34g45tfblrkvzjh0cdlvs_17_7_2012_19_24_3.doc"
        PublishedDate="2012-07-10T14:37:02.073" key="310-072012-A5CDE"/>
</ContentDetails>

但现在我需要的是

<ContentDetails>
  <Contents ContentName="Sample Project Plan SOW" ID="3"
        FilePathURL="http://192.168.30.59/contentraven/Uploads/Custom_View_LLC/EncryptedFile/zsg34g45tfblrkvzjh0cdlvs_17_7_2012_19_24_3.doc"
        PublishedDate="2012-07-10T14:37:02.073" key="310-072012-A5CDE"/>
   <categories>
      <category id="1" categoryname="Category-1" contentid="3"/>
      <category id="2" categoryname="Category-2" contentid="3"/>
      <category id="3" categoryname="Category-3" contentid="3"/>
  </categories>
</ContentDetails>

我正在尝试这样的事情

var xEle = new XElement("ContentDetails",
            from emp in _lstContents
            select new XElement("Contents",
                        new XAttribute("key", emp.Key),
                        new XAttribute("PublishedDate", emp.PublishedDate),
                        new XAttribute("FilePathURL", emp.FilePathURL),
                        new XAttribute("ID", emp.TitleID),
                        new XAttribute("ContentName", emp.Name),
                            new XElement("Categories",
                                new XElement("Category",
                                    new XAttribute("ID", emp.Category.ForEach(_P => _P.CategoryID ),
                                    new XAttribute("CategoryName", emp.Category.ForEach(_P => _P.CategoryName))
                                )

                        ));

我怎么能做到这一点?

emp.Category 是_lstContents List 中的一个Property List;

我需要创建与 emp.Category 中一样多的 CategoryName 属性。

请参阅随附的屏幕截图。谢谢

在此处输入图像描述

4

1 回答 1

2

您快到了,您只需要将类别集合中的项目投影到category元素。这与您将项目投影_lstContentsContents元素的方式没有太大区别。

var contentDetails =
    new XElement("ContentDetails",
        from contents in _lstContents
        select new XElement("Contents",
            new XAttribute("ContentName", contents.Name),
            new XAttribute("ID", contents.TitleID),
            new XAttribute("FilePathURL", contents.FilePathURL),
            new XAttribute("PublishedDate", contents.PublishedDate),
            new XAttribute("key", contents.Key),
            new XElement("categories",
                from category in contents.Category
                select new XElement("category",
                    new XAttribute("id", category.CategoryID),
                    new XAttribute("categoryname", category.CategoryName),
                    new XAttribute("contentid", category.ContentID)
                )
            )
        )
    );
于 2012-07-25T15:41:49.117 回答