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是为了证明我的观点。

Linq Select Where IN

您应该做相反的事情-检查邮政编码数组是否包含当前的邮政编码:

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)