【问题标题】:Which is fast to fetch the data - Lambda expressions OR Linq query?哪个可以快速获取数据 - Lambda 表达式或 Linq 查询?
【发布时间】:2013-11-01 16:56:59
【问题描述】:

我正在开发一个 Web 应用程序并使用 mvc、实体框架、ado.net 实体。 我想知道在某些条件下哪个可以快速获取数据: 1. Lambda 表达式 2.linq查询

代码片段如下(在下面的代码中_dict是字典)

string fname = "", username = "", lname = "", mail = "";
            if (_dict.ContainsKey("fname"))
                fname = _dict["fname"].ToLower();
            if (_dict.ContainsKey("username"))
                username = _dict["username"].ToLower();
            if (_dict.ContainsKey("lname"))
                lname=_dict["lname"].ToLower();
            if (_dict.ContainsKey("mail"))
                mail = _dict["mail"].ToLower();

            var _admins = db.AdminsTables.Where(x =>
                x.firstname.ToLower().Contains(fname) &&
                x.username.ToLower().Contains(username) &&
                x.lastname.ToLower().Contains(lname) &&
                x.useremail.ToLower().Contains(mail)).ToList();

string fname = "", username = "", lname = "", mail = "";
            if (_dict.ContainsKey("fname"))
                fname = _dict["fname"].ToLower();
            if (_dict.ContainsKey("username"))
                username = _dict["username"].ToLower();
            if (_dict.ContainsKey("lname"))
                lname=_dict["lname"].ToLower();
            if (_dict.ContainsKey("mail"))
                mail = _dict["mail"].ToLower();

                      var _admins = (from record in db.AdminsTables
                           where record.firstname.ToLower().Contains(fname) && record.username.ToLower().Contains(username) && record.lastname.ToLower().Contains(lname) && record.useremail.ToLower().Contains(mail)
                           orderby record.id descending
                           select record).ToList();

请建议我哪个更快并且可能,然后也给出理由。

【问题讨论】:

标签: asp.net-mvc-4 linq-to-entities entity-framework-5


【解决方案1】:

事实上,您几乎可以将每个 linq 查询转换为 lambda 表达式。当您使用 linq-to-entities 或实体框架工作时,使用 linq 查询或 lambda 表达式并不重要。重要的是生成的 SQL 查询。 因此,在您的情况下,第一个代码示例会更快,因为(就像 @karaxuna 已经提到的那样)您向查询添加了排序。 当您关注性能时,您应该比较代码中的 linq 查询和数据库中的 sql 查询。例如:

  1. 为您想要优化的结果编写 SQL 查询并查看需要多长时间
  2. 在代码中编写一个 LINQ 查询以获得相同的结果,看看需要多长时间

如果 SQL 查询要快得多,您应该创建一个视图、一个存储过程并从代码中调用它。 如果测量的时间几乎相同,则取决于您是使用 LINQ 查询还是创建视图、存储过程并从代码中调用它。 如果 LINQ 查询快得多,您应该查看生成的 SQL 查询,它似乎比您的查询更好。

就我的经验而言,当您查询分布在多个表中并且需要大量连接和/或排序操作的数据时,只有显着的性能差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多