C# 我可以做多次吗;。包括「;在单个Linq到SQL语句中进行测试?

C# 我可以做多次吗;。包括「;在单个Linq到SQL语句中进行测试?,c#,linq-to-sql,C#,Linq To Sql,我需要返回与字符串列表中的一个匹配的所有项。用户输入分号分隔字符串的列表: abc;mno;xyz 我需要返回所有产品代码(例如)包含“abc”或“mno”或“xyz”的项目 我有以下代码,适用于一种情况,正确返回allItems中的预期项目: IQueryable<Items> allItems = FindItemsBasedOnSomeOtherCriteria(); var productCodes = inputString.Split(new char[] { ';',

我需要返回与字符串列表中的一个匹配的所有项。用户输入分号分隔字符串的列表:

abc;mno;xyz

我需要返回所有产品代码(例如)包含“abc”或“mno”或“xyz”的项目

我有以下代码,适用于一种情况,正确返回
allItems
中的预期项目:

IQueryable<Items> allItems = FindItemsBasedOnSomeOtherCriteria();
var productCodes = inputString.Split(new char[] { ';', ',' }, StringSplitOptions.RemoveEmptyEntries);
IEnumerable<Item> results = null;

foreach (var productCode in productCodes)
{
    var query = allItems.Where(i => i.ProductCode.ToLower().Contains(productCode.ToLower()));

    if (results == null)
    {
        results = query;
    }
    else
    {
        results = results.Union(query);
    }
}

allItems = results.AsQueryable();
但这并不存在

搜索提出了一个问题:

这是在问同样的问题,但公认的答案只是指向第三方工具包的链接

我尝试过其他构造,包括CodeCaster建议的构造,它们要么给出相同的错误,要么给出以下错误:

除Contains运算符外,查询运算符的LINQ到SQL实现中不能使用局部序列

参考代码为:

var result = allItems.Where(i => productCodes.Any(p => i.ProductCode.ToLower().Contains(p)));

不幸的是,对于基本的LINQ到SQL,这是不可能的。另一个问题中已经被接受的答案确实是正确的方法


PredicateBuilder和提到的LINQKit是开源的,可以简单地在项目中使用,不会出现任何问题。也可以使用它,这使得项目中的使用更加简单。

您可以尝试
allItems.Where(i=>productCodes.Any(p=>i.ProductCode.ToLower().Contains(p))
,但我不知道这是否可以翻译成商店表达式。似乎类似于这个问题:@RobH-确实如此-我的搜索中也没有出现这个:(@CodeCaster的建议有效吗?似乎应该…@CodeCaster-这给出了“除了Contains运算符外,查询运算符的LINQ到SQL实现中不能使用本地序列。”我担心这一点。一旦我有机会签出PredicateBuilder,我打算将其标记为重复。
var result = allItems.Where(i => productCodes.Any(p => i.ProductCode.ToLower().Contains(p)));