【发布时间】:2014-11-16 03:42:55
【问题描述】:
我有一个对象集合,其中每个对象也有一个集合。像这样:
public class Product
{
public int Id { get; set; }
public List<Tuple<string, double>> Sales { get; set; }
}
我想运行 LINQ 查询来检查 Product 实体是否存在,如果确实存在,请检查它的 Sales 集合以查看特定字符串值(来自元组)是否也存在。如果是这样,我想返回相应的双精度(也来自元组)。
我知道我可以用几行代码做到这一点,如下所示:
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();
}
}
是否可以在一行中做到这一点?
【问题讨论】:
-
您将看到
NullReferenceExceptions,我怀疑您的代码会更清晰。 -
您意识到,我希望,如果列表中的多个项目具有该生产 id,
SingleOrDefault将引发异常。您确定不要在这里FirstOrDefault? -
@JimMischel 鉴于他正在处理主键,它们不应该被复制。如果它们以某种方式存在,那将是数据中的错误,应该抛出。
-
@Servy 如果它们是主键,那么(在这里挑剔)
FirstOrDefault在性能方面更快(因为它不需要检查是否有重复项来抛出异常)。 -
@Servy:我没有看到任何说他正在使用主键。但如果是这样的话,那当然了。