如何使用LINQ进行'复合'选择?

时间:2012-02-02 03:42:01

标签: xml linq select

我有一个XML文件,其元素Product包含$中的Name和Price。我想同时选择Name和$ Price,但我想在我计算的欧元价格中添加一个字段。我该怎么做呢?感谢。

我目前的查询是:

var queryAllProducts = from product in products
                    select product;

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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); }
    }
}