c#如何在对象的集合和集合内的每个对象上运行 LINQ 查询

标签: Linq C#
发布时间: 2017/2/28 22:39:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有的每个对象还有一个集合的对象的集合。就像这样︰

public class Product
{
    public int Id { get; set; }
    public List<Tuple<string, double>> Sales { get; set; }
}

我想要运行 LINQ 查询来检查如果一个产品的实体存在,如果它不存在,请检查它是销售集合以查看特定的字符串值 (元组) 是否也存在。如果是这样,我想要返回相应的双 (也从元组)。

我知道我可以做这几行代码,如下所示︰

saleAmount = String.Empty;                      
product = Model.Products.SingleOrDefault(p => p.Id == product.Id);
if(product != null)
{
    productSale = product.Sales.SingleOrDefault(i => i.Item1 == sale.Id);
    if(productSale != null)
    {
        saleAmount = productSale.Item2.ToString();
    }
}

它是可能做这一行的?

解决方法 1:

这里的关键是,实际上并没有实现的使用通过查询 SingleOrDefault 你实际上完成之前定义它的全部。 使用 Where 相反,然后使用 SingleOrDefault 在尽头。

var query = (from product in Model.Products
                where product.Id == someProductId
                let sale = product.Sales.SingleOrDefault(i => i.Item1 == sale.Id)
                where sale != null
                select new
                {
                    product,
                    saleAmount = sale.Item2,
                })
            .SingleOrDefault();
赞助商