【问题标题】:Linq - check if the any of the values present in an array exists in the database tableLinq - 检查数组中存在的任何值是否存在于数据库表中
【发布时间】:2020-04-09 04:29:57
【问题描述】:

我正在探索是否有一种方法可以在不使用循环的情况下检查数组中存在的任何值是否存在于表中。

因此,即使表中存在 1 个值,该方法也应返回 true,如果不存在任何值,则应返回默认值 false。

我想像下面这样,下面不是一个工作代码只是一个想法..所以想检查是否有一种有效的方法来实现这一点。

public bool CheckTable(string strList)
{
    bool IsPresent = False;
    String[] Arr = strList.split(',');
    foreach(string str in Arr)
    {
        var x = DBContext.TableEmployees.where(e => e.Location == str).select(e => e.Location);
        if(x == null)
        {
            isPresent = false;
        }
        else
        {
            isPresent = true;
        }
    }
}

【问题讨论】:

  • 绝对不要foreach它;这真的会为 100 个长列表运行 100 个查询

标签: c# asp.net-mvc linq


【解决方案1】:

像这样:

public bool CheckTable(string strList)
{
    string[] strs = strList.Split(',');
    return DBContext.TableEmployees.Any(e => strs.Contains(e.Location));
}

阅读https://www.microsoftpressstore.com/articles/article.aspx?p=2225065&seqNum=4 了解更多关于 IN/EXISTS 的背景知识以及如何将 LINQ 表达式映射到它们。

在使用 LINQ 时,请务必注意,如果您的表达式无法被理解并完全翻译成 sql,则它可能无法完全在服务器上运行。有时 LINQ to sql 会下载数据并在本地翻找 - https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/language-reference/query-execution 的“存储执行”部分有一些信息(整个文档值得阅读,实际上 - 延迟执行也是一个常见问题)

【讨论】:

  • 所以有了这个我将循环遍历我的数组中的所有项目对吗?
  • 我假设在您的代码中我们需要使用数组 Arr 来代替 str,因为 str 只是字符串数组中的一个字符串
  • 没有问题。随意删除任何不再相关的 cmets,作为编辑的结果
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 1970-01-01
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多