foo
要素を繰り返すことができるかどうかはわかりませんが、この場合Enumerable<String>
は、変更するのに十分簡単なとして返されます。
セットアップ(ここでは、同じWidgets
XMLを持つ2つの項目があります):
public class Item
{
public string Name;
public string Widgets;
}
var xml = "<widgets>\r\n <widget code=\"A\">\r\n <foo>1</foo>\r\n </widget>\r\n <widge" +
"t code=\"B\" />\r\n</widgets>";
var item1 = new Item {Name = "I1", Widgets = xml};
var item2 = new Item {Name = "I2", Widgets = xml};
var items = new Item[] {item1, item2}.AsEnumerable();
ウィジェットの選択プロセス:
var widgets =
from item in items
from widget in XElement.Parse(item.Widgets).Elements("widget")
select new {
Name = item.Name,
Code = widget.Attribute("code").Value,
Foo = widget.Elements("foo").Select(f => f.Value)
};
これにより、名前(アイテムから)とコードとフー(XMLから)が正しく設定された4つのアイテム(I1 A、I1 B、I2 A、I2 B)が得られます。
foo
単一の要素になりたい場合、変更は次のようになります(基本的に設定)。これにより、が存在しないFirstOrDefault
場合はnullが返されます。foo
var widgets =
from item in items
from widget in XElement.Parse(item.Widgets).Elements("widget")
select new {
Name = item.Name,
Code = widget.Attribute("code").Value,
Foo = widget.Elements("foo").Select(f => f.Value).FirstOrDefault()
};