2

「AND」オンデマンドを実行する次のクエリがあります。

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.
}

それで、どうすれば同じクエリを実行できますが、「OR」オンデマンドを実行できますか (クエリが意味を成すように)。

4

3 に答える 3

4

含むを使用:

var codes = products.Select(x => x.Code).ToArray();

query.Where(p => codes.Contains(p.Code));
于 2012-04-04T18:23:03.073 に答える
4

INfor 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>)
于 2012-04-04T18:24:01.563 に答える
3

ContainsBrad と Joe が書いたメソッドを使用するか、(それが不可能な場合は) PredicateBuilderを使用します。

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);
于 2012-04-04T18:27:29.283 に答える