IEnumerable.Contains() 转换为 SQL IN,如:
WHERE 'american airlines' IN ('airline', 'railroad') -- FALSE
String.Contains() 转换为 SQL LIKE %...%,如:
WHERE 'american airlines' LIKE '%airline%' -- TRUE
如果您想要联系人的行业为 LIKE(包含)任何给定行业的联系人,您希望将 Any() 和 String.Contains() 组合成如下内容:
string[] industries = { "airline", "railroad" };
var query = from c in contacts
where industries.Any(i => c.Industry.Contains(i))
select c;
但是,像这样组合 Any() 和 String.Contains() 在 LINQ to SQL 中是不 支持的。如果给定行业的集合很小,您可以尝试以下方法:
where c.Industry.Contains("airline") ||
c.Industry.Contains("railroad") || ...
或者(尽管通常不推荐)如果联系人集足够小,您可以将它们全部从数据库中取出,并使用 contacts.AsEnumerable() 或 contacts.ToList() 作为过滤器应用 LINQ to Objects上述查询的来源:
var query = from c in contacts.AsEnumerable()
where industries.Any(i => c.Industry.Contains(i))
select c;