0

List<OrderItem>インスタンス化中のフィールドを初期化しようとして、次のコードがありOrderます。私の問題は、Visual Studio が最も内側の LINQ クエリを好まないことです。from具体的には、 、i.Element("OrderItems")、およびについて不平を言っていselectます。

この方法でオブジェクトを初期化することはできませんか、それとも間違ったことをしているだけですか? ありがとう、コナー。

var orderXml = XDocument.Load("FileTest\\orders.xml");

orderXml.Descendants("Order").Do(i => orderList.Add(new Order()
{
    Customer = new Customer()
    {
        ID = new Guid(i.Element("Customer").Element("ID").Value)
    },

    OrderItems = new List<OrderItem>()
    {
        from current in i.Element("OrderItems")
        select new OrderItem() {
            Product = new Product()
            {
                ID = new Guid(current.Element("ID").Value),
                UnitPrice = current.Element("UnitPrice").Value.To<decimal>()
            },
            Quantity = current.Element("Quantity").Value.To<int>(),
            TotalPrice = current.Element("TotalPrice").Value.To<decimal>()
        }
    }
}));
4

1 に答える 1

3

IEnumerable<T>リスト内の各項目の呼び出し add にオブジェクト初期化子を使用します。IEnumerable<T>ただし、直接供給することはできません。

http://msdn.microsoft.com/en-us/library/vstudio/bb384062.aspx

代わりにコンストラクターの使用を検討してください。

 OrderItems = new List<OrderItem>(
    from current in i.Element("OrderItems")
    select new OrderItem() {
        Product = new Product()
        {
            ID = new Guid(current.Element("ID").Value),
            UnitPrice = current.Element("UnitPrice").Value.To<decimal>()
        },
        Quantity = current.Element("Quantity").Value.To<int>(),
        TotalPrice = current.Element("TotalPrice").Value.To<decimal>()
    }
 )
于 2013-10-04T10:35:51.417 に答える