如果您说您知道如何在 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 是映射ClientId 和ProductId 的实体的集合(因此应该真正称为AllowedProducts),您可以询问其 allowedproduct 集合具有任何 x 的客户,其中x.ProductId 是 Contained 在您想要的列表中:
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);