C# &引用;或;使用Linq对实体进行按需访问,我如何做到这一点?

C# &引用;或;使用Linq对实体进行按需访问,我如何做到这一点?,c#,linq,C#,Linq,我有以下按需执行“和”的查询: var products = // Selecting a list of products in anywhere based in a filter... foreach (var product in products) { query = query.Where(p => p.Code == product.Code); // with this way, this query make no sense because this happ

我有以下按需执行“和”的查询:

var products = // Selecting a list of products in anywhere based in a filter...

foreach (var product in products)
{
    query = query.Where(p => p.Code == product.Code); // with this way, this query make no sense because this happens in any scenario, never a code can be more than one code.
}
那么,如何执行相同的查询,但执行“或”按需查询(以便查询有意义)?

使用:


您可以在中为LINQ使用
的传真:

var productCodeList = products.Select(p => p.Code).ToList();

query = query.Where(p => productCodeList.Contains(p.Code));
基本上是说:

SELECT   *
FROM     products
WHERE    code IN (<list_of_codes>)
选择*
来自产品
其中代码位于()

使用Brad和Joe编写的
Contains
方法,或者(如果不可能)使用

var predicate=PredicateBuilder.False();
foreach(产品中的var产品)
{
var代码=产品代码;
谓词=谓词或(p=>p.Code==Code);
}
var products dataContext.products.Where(谓词);

我遇到以下错误:
无法创建“MyEntities.Product”类型的常量值。在此上下文中仅支持基本类型(“如Int32、字符串和Guid”)。
什么是
Product.code
?上课?不。prolem(我猜)是当您在where中执行Select-in产品时,linq尝试使用类产品来执行查询。所以,要解决这个问题,你必须执行产品。选择像@BradChristie在他的答案中所做的那样。PredicateBuilder为+1,尽管我更喜欢Pete Montgomery的版本-
SELECT   *
FROM     products
WHERE    code IN (<list_of_codes>)
var predicate = PredicateBuilder.False<Product>();

foreach (var product in products)
{
    var code = product.Code;
    predicate = predicate.Or(p => p.Code == code);
}

var products dataContext.Products.Where(predicate);