【问题标题】:LINQ query to find items in a list from other list by itemLINQ查询以逐项从其他列表中查找列表中的项目
【发布时间】:2022-01-04 16:41:24
【问题描述】:

我有代码,它工作正常,但现在想将“糖”更改为 shopResources.Product:列表 shopResourceProduct> 并通过 id 找到它。我该怎么做?之后它应该返回相同的 ProductList

var usedProduct = await this.context.Clients
        .Where(r => r.AllowedProduct.Any(u => u.Product.Contains("sugar")))
        .Select(r => r)
        .ToListAsync(ct);

我查看了其他查询,但我可以找到与 Linq 的密切比较。任何想法或任何你可以指出我的地方都会有很大的帮助。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    如果您说您知道如何在 N 个产品列表中查找单个产品,但您现在想在 N 个列表中查找 2+ 个产品,一般模式是:

    var iWant = new T[] { some, things, here };
    
    var result = listOfNThings.Where(thing => iWant.Contains(thing));
    

    与您通常认为的“在事物集合中寻找事物”相比,这通常是“颠倒的”,看起来更像:

    var result = listOfNThings.Where(thing => thing.Something == blah);
    

    “直截了当”的方式考虑thing.Something is equal to ...。 “颠倒的方式考虑listIWant.Contains(thing.Something),因为没有thing.Something.IsContainedWithin(listIWant) - 这有点偏离我们WHERE something IN (list,i,want)

    的SQL

    假设Client.AllowedProduct 是映射ClientIdProductId 的实体的集合(因此应该真正称为AllowedProducts),您可以询问其 allowedproduct 集合具有任何 x 的客户,其中x.ProductIdContained 在您想要的列表中:

    var iWant = new[] { 1, 6, 9, 22 }; //list of 4 productids I want
    
    var productsWanted = await this.context.Clients
        .Where(c => c.AllowedProduct.Any(ap => iWant.Contains(ap.ProductId)))
        .ToListAsync(ct);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-13
      • 2021-04-12
      • 1970-01-01
      • 2022-10-12
      相关资源
      最近更新 更多