c# - Linq 查询一个集合内的集合、来自另一个集合的集合

标签 c# linq

我有类似这个模型的东西:

public class Product
{
  public int ID { get; set; }
  public string Name { get; set; }

  public ICollection<ProductVariation> Variations { get; set; }
}


public class ProductVariation
{
  public int VariationID { get; set; }
  public string Size { get; set; }
  public bool InStock { get; set; }
}

我有一个产品列表 - 称为“availableProducts”

List<Product> availableProducts;

然后我还有一个 int - requestVariationNumbers 列表:

List<int> requestedVariationNumbers;

我想要做的是从 availableProducts 获取产品,其中 Product.Variations 集合包含 requestedVariationNumbers 中的 VariationID

到目前为止,我已经得到了这个: (由 ReSharper 基于一系列丑陋的 foreach 语句生成...)

对我来说这似乎“肮脏”......

    var result = (
      from rvn in requestedVariationNumbers
      from product in availableProducts
      from itemVariation in product.ItemVariations
      where itemVariation.ItemNo == rvn
      select product)
      .ToList();

最佳答案

试试这个:

var result = availableProducts.Where(p => p.Variations
                                           .Any(v => requestedVariationNumbers
                                                     .Contains(v.VariationID)));

这并不是真正有效。如果 requestedVariationNumbersHashSet 会更好,因为在最坏的情况下会为每个产品的每个变体调用 requestedVariationNumbers.Contains(v.VariationID) ,在最好的情况下会为每个产品的每个第一个变体调用。

关于c# - Linq 查询一个集合内的集合、来自另一个集合的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7401174/

相关文章:

c# - 正确使用 return Task.FromException

c# - C#WPF PolyLine是我的窗口宽度的50%

c# - 使用 C# Linq to XML 解析 GML 数据

c# - 在 LINQ 中使用 “OfType”

c# - 无法从 Expression< Func < Entity, bool>> 转换为 Func < Entity, bool>

c# - 使用 Entity Framework、LINQ 进行预加载

c# - 使用 Visual Studio 2017 的新 csproj 格式如何添加对旧可移植库的支持?

c# - 如何在后台从 C# 运行批处理文件

c# - EF 6 Plus - 如何进行 future 的原始查询

linq - Enumerable.ToDictionary 是否只检索它需要的内容?