2009-04-13 57 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

相關問題