LINQ to SQL:lambda表达式与.Where()

时间:2014-05-03 02:55:27

标签: c# sql linq lambda

var movies = from m in db.Movies
             select m;

movies = movies.Where(s => s.Title.Contains(searchString));

var movies = from m in db.Movies
             where String.Equals(m.Title,searchString)
             select m;

等效?如果是这样,为什么要使用另一个呢?前者的语法似乎比后者更加神秘。

3 个答案:

答案 0 :(得分:1)

在幕后,还有一些翻译。

对于LINQ to SQL(和LINQ to Entities),select关键字有效地结束查询。因此,第二个示例将过滤器作为SQL查询的一部分,而第一个示例在查询之后执行。

第三种方法是进行LINQ查询,称为流利语法:

var movies = db.Movies.Where(s => s.Title.Contains(searchString));

如果您查看signature of Where,就会发现:

IQueryable<T> Where(IQueryable<T> source, Expression<Func<T,bool>> predicate);

关键是predicate的类型:它是(lambda)函数的表达式,而不仅仅是(lambda)函数。这使.Net可以动态地将Expression对象转换为SQL。对于查询语法,此解析在select结束。

答案 1 :(得分:0)

编译代码时,

查询表达式由编译器编译为方法语法, 无论你编写代码的方式是优先考虑的问题,开发人员都希望查询表达式来自sql background .. :)

答案 2 :(得分:0)

你是对的,后一种形式更具可读性,但有时你需要表达方法,比如当你想获得结果的Count时,你当然可以混合这两种形式。