簡體   English   中英

LINQ到對象-將列表分配給屬性

[英]LINQ to Objects - Assign list to property

我試圖寫一個LINQ to Objects / XML查詢來創建對象。 我有一個類,它具有SomeModelClass IList屬性。 SomeModelClass還具有幾個IList ,需要從XML進行填充。

這是我第一次嘗試查詢多層嵌套XML,但不確定如何繼續。

當前,該代碼無法編譯,因為select new似乎無法嵌套。 如何實際查詢嵌套的XML以創建具有對象列表和字符串列表的對象?

我已經展示了我嘗試過的代碼。

我有這樣的課:

public class MyClass
{
    public string Name { get; set }
    public IList<SomeModelClass> ModelList { get; set; }
}

這是我的模型課:

public class SomeModelClass
{
    public IList<string> MyList1 { get; set; }
}

XML如下所示:

  <someXml>
    <section name="test">
      <myModelClassXml>
        <someValue value="string1" />
        <someValue value="string2" />
        <someValue value="string3" />
      </myModelClassXml>
    </section>

    <section name="test2">
      <myModelClassXml>
        <someValue value="string1" />
      </myModelClassXml>
    </section>
  </someXml>

我到目前為止的代碼:

    var query = (from r in xdoc.Descendants("someXml").Descendants("section")
                 select new MyClass()
                 {
                     Name = r.Attribute("name").Value,

                     //Make list of SomeModelClass AND ALSO populate SomeModelClass's lists
                     select new SomeModelClass
                     {
                        MyList1 = What needs to be here?
                     }

                 });

這應該給您正確的結果:

List<MyClass> result = xdoc.Root.Descendants("section")
            .Select(x => new MyClass
               {
                   Name = (string)x.Attribute("name"),
                   ModelList = x.Elements("myModelClassXml")
                                .Select(y => new SomeModelClass 
                    {
                        MyList1 = y.Elements("someValue")
                                   .Select(z => (string)z.Attribute("value")).ToList()
                                                               }).ToList()
                    }).ToList();

首先找到section所有后代,然后將其投影到MyClass 現在既然myModelClassXml是直接孩子section ,我們可以使用Elements ,以進一步獲取someValue元素及其價值屬性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM