找不到与SELECT * FROM [Source] WHERE [Field] IN [String Array]
等效的lambda linq。我需要从包含字符串数组中的邮政编码的数据表中选择所有数据。我想要一个更快的方式,而不是只是迭代每一行比较它们,因为我认为这将是相当低效的(或者我相信它无论如何)。我似乎无法在Google上找到关于如何在数据表上执行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
试图证明我的观点。
答案 0 :(得分:2)
你应该做相反的事情 - 检查邮政编码数组是否包含当前的邮政编码:
Where(mod => zipCodes.Contains(mod.Field<string>("ZipCode"))
这与验证当前邮政编码IN数组是否相同。
答案 1 :(得分:0)
简单回答你的问题是,
[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)