0

我正在开发一个 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();

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

4

1 回答 1

0

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

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

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

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

于 2013-11-01T08:52:54.133 回答