2012-02-02 37 views
1

我有一个元素产品的XML文件,其中包含名称和价格$。我想选择名称和$价格,但我想在我计算的欧元价格的字段中添加。我该怎么做呢?谢谢。如何使用LINQ进行“复合”选择?

我当前的查询是:

var queryAllProducts = from product in products 
        select product; 

回答

2

假设product有场NamePriceUsd,而且你也有一个功能叫做UsdToEuro,你可以做你的选择如下:

var queryAllProducts = from product in products 
    select new { 
     product.Name 
    , product.PriceUsd 
    , PriceEuro = UsdToEuro(product.PriceUsd) 
    }; 

如果你不想“爆发”产品的各个领域,你可以通过完整的匿名类型:

var queryAllProducts = from product in products 
    select new { 
     Product = product 
    , PriceEuro = UsdToEuro(product.PriceUsd) 
    }; 

您可以从element.Product.Name访问产品字段,而不是第一个示例中的element.Name。在价格添加

+0

非常感谢!这将工作。但是我想知道是否有一种简单的方式来处理元素产品,如果它有100个子元素而不是2个Name和PriceUsd。我宁愿不必拼写出每个子元素。 – user763554 2012-02-02 03:56:01

+0

@ user763554当然,你可以轻松地做到这一点。我更新了答案以包含此替代方案。 – dasblinkenlight 2012-02-02 04:01:21

1

一种方法是从你的LINQ查询返回一个匿名类型:

var queryAllProducts = from product in products 
         select new { 
          Name = product.Name, 
          Price = product.Price, 
          PriceEuro = ConvertToEuroPrice(product.Price) 
         }; 

另一种方式来添加属性,如果Product类定义为partial类,是只将PriceEuro属性添加到该类。

public partial class Product 
{ 
    public decimal PriceEuro 
    { 
     get { return ConvertToEuroPrice(Price); } 
    } 
}