次の方法で共有


方法 : 新しい型を射影する (LINQ to XML)

更新 : November 2007

このセクションにあるその他の例では、XElementIEnumerable<T>、string の IEnumerable<T>、および int の IEnumerable<T> として結果を返すクエリを示しています。これらは一般的な戻り値の型ですが、すべてのシナリオに適切であるとは限りません。多くの場合、クエリを使用して、別の型の IEnumerable<T> を返すようにする必要があります。

使用例

この例では、select 句でオブジェクトをインスタンス化する方法を示します。コードでは、まずコンストラクタを使用して新しいクラスを定義し、次に、式が新しいクラスの新しいインスタンスになるように select ステートメントを変更します。

この例では、「サンプル XML ファイル : 一般的な購買発注書 (LINQ to XML)」の XML ドキュメントを使用しています。

class NameQty {
    public string name;
    public int qty;
    public NameQty(string n, int q)
    {
        name = n;
        qty = q;
    }
};

class Program {
    public static void Main() {
        XElement po = XElement.Load("PurchaseOrder.xml");

        IEnumerable<NameQty> nqList =
            from n in po.Descendants("Item")
            select new NameQty(
                    (string)n.Element("ProductName"),
                    (int)n.Element("Quantity")
                );

        foreach (NameQty n in nqList)
            Console.WriteLine(n.name + ":" + n.qty);
    }
}
Public Class NameQty
    Public name As String
    Public qty As Integer
    Public Sub New(ByVal n As String, ByVal q As Integer)
        name = n
        qty = q
    End Sub
End Class

Public Class Program
    Shared Sub Main()
        Dim po As XElement = XElement.Load("PurchaseOrder.xml")

        Dim nqList As IEnumerable(Of NameQty) = _
            From n In po...<Item> _
            Select New NameQty( _
                n.<ProductName>.Value, CInt(n.<Quantity>.Value))

        For Each n As NameQty In nqList
            Console.WriteLine(n.name & ":" & n.qty)
        Next
    End Sub
End Class

この例では、「方法 : 単一の子要素を取得する (LINQ to XML)」で説明している M:System.Xml.Linq.XElement.Element メソッドを使用しています。また、キャストを使用して、M:System.Xml.Linq.XElement.Element メソッドによって返された要素の値を取得します。

この例では次の出力が生成されます。

Lawnmower:1
Baby Monitor:2

参照

概念

射影と変換 (LINQ to XML)