【问题标题】:Linq Select Where INLinq 选择在哪里
【发布时间】:2014-05-21 16:15:39
【问题描述】:

找不到与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 试图证明我的观点。

【问题讨论】:

  • 因此您想知道所有邮政编码的列表是否包含在单个邮政编码中。那有意义吗?所有这些邮政编码都会存在于您拥有的一个邮政编码中吗?

标签: c# sql linq lambda


【解决方案1】:

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

Where(mod => zipCodes.Contains(mod.Field<string>("ZipCode"))

这与验证当前邮政编码是否为 IN 数组相同。

【讨论】:

  • 好的,现在如果结果为空怎么办?这会引发错误。 List&lt;DataRow&gt; l = dtEtechModelRequests.AsEnumerable().Where(mod =&gt; zipCodes.Contains(mod.Field&lt;string&gt;("ZipCode"))).ToList();
  • @Volearix 哪个结果为空? zipCodes 不能为空。你有什么错误?
  • {"Value cannot be null.\r\nParameter name: source"} 是我收到的确切错误。
  • @Volearix 确保 dtEtechModelRequests 不为空。使用调试器打破这一行并检查变量的值
  • 呃,这就是问题所在。我的代码处于“调试”模式,不运行填充数据表的过程。感谢您的正确答案以及“疑难解答”!
【解决方案2】:

对您的问题的简单回答是,

[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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2013-08-05
    • 2015-10-24
    • 1970-01-01
    相关资源
    最近更新 更多