2009-04-13 54 views
2

我知道Linq-to-SQL已经死了,但无论如何,我认为这是非常基本的,我只是对Linq-to-SQL到底在做什么和不做什么的问题感到困惑。在显式的LINQ-to-SQL(C#)中,顺序很重要吗?

如果我已经建立了一个表达式树为“比如说myPredicate”,并有这样的事情:

(from request in DataContext.RequestsTable 
select request).Where(myPredicate) 
       .OrderByDescending(item => item.changeDate) 
       .Take(10) 

是它会像下面的SQL工作:

SELECT TOP 10 * FROM RequestsTable 
WHERE (<<myPredicate equivalent>>) 
ORDER BY ChangeDate DESC 

这似乎只是对我来说很奇怪,因为“.Where()”出现在我的示例代码中的“select”之后。 “select”和“where()”和“orderby()”的相对位置是否会影响事物?

或者,我可以在sql-esque语法中做到这一切吗?例如,是否有一些方法可以在替代语法中使用我的WHERE谓词,像这样?

(from request in DataContext.RequestsTable 
where [somehow inject myPredicate] 
order by changeDate descending 
select request).Take(10) 

回答

7

你得有相同的查询,LINQ to SQL的不会评价,并生成T-SQL,直到后你做了什么事执行查询(如.ToList()例如该排序并不重要

事实上,你甚至可以添加排序依据和其中初始查询分配后的条款

var query = (from x in context.RequestsTable 
      select x); 

query = query.AsQueryable().Where(<>); 

return query.ToList(); //executes 

是一样的:。

return (from x in context.RequestsTable 
      where <> 
      select x).ToList(); //executes 

是一样的:

return (from x in context.RequestsTable 
     selext x).Where(<>).ToList(); 

我不知道的LINQ to SQL是“死”不过我听说,它可能会被轧成ADO实体框架。 LINQ to SQL生成的T-SQL远远优于实体框架!

+0

+1对于由linq2sql生成的T-SQL优于EFs T-SQL :)(没有足够的人大声说出来),只要我们(开发人员)想要保存它,l2s就不会死活着...... – 2009-04-14 00:16:32

相关问题