Linq Select Where IN
本文关键字:IN Where Select Linq | 更新日期: 2023-09-27 18:04:22
找不到等价于SELECT * FROM [Source] WHERE [Field] IN [String Array]
的lambda linq。我需要从包含邮政编码的字符串数组的数据表中选择所有数据。我想要一种更快的方法,而不仅仅是通过每一行进行迭代比较,因为我相信这将是相当低效的(或者我相信无论如何)。我似乎找不到一个足够的答案在谷歌上如何执行lambda LINQ IN
查询数据表。任何帮助将是伟大的!以下是我目前的内容:
List<string> lst = dtEtechZipCodeEmailRecipients.AsEnumerable()
.Select(o => o.Field<string>("Email")).Distinct().ToList();
for (int i = 0; i < lst.Count - 1; ++i)
{
string email = lst[i].ToString().ToUpper();
string[] zipCodes = dtEtechZipCodeEmailRecipients.AsEnumerable()
.Where(zip => (zip.Field<string>("Email") ?? (object)String.Empty).ToString().ToUpper() == email)
.Select(zip => zip.Field<string>("ZipCode")).ToArray();
Console.WriteLine(" - " + email);
dtEtechModelRequests.AsEnumerable().Where(mod => mod.Field<string>("ZipCode").Contains(zipCodes)).Select(mod => mod);
}
那不起作用,一切,但.Contains
确实做什么我需要虽然。我离开.Contains
是为了证明我的观点。
您应该做相反的事情-检查邮政编码数组是否包含当前的邮政编码:
Where(mod => zipCodes.Contains(mod.Field<string>("ZipCode"))
这与验证当前邮政编码是否在数组中相同。
对你的问题的简单回答是,
[Source].Where(el => [String Array].Contains(el.Field<string>("Field"))
如果您需要NOT IN
,则遵循以下模式
在[String Array]
前面添加!
[Source].Where(el => ![String Array].Contains(el.Field<string>("Field"))
备选表示
[Source].Where(el => [String Array].Contains(el.Field<string>("Field")==false)