2012-06-28 10 views
6

我正在尋找一種方法來創建可用於我的Linq查詢中的函數,該函數將轉換爲SQL。當我們使用Linq-to-SQL時,我提出了類似的question。答案是映射到db中的UDF。由於模型定義的清潔,我們使用代碼優先模型,但不幸的是,我無法知道define functions,映射到函數,並映射到存儲的特效。應該生成數據庫,我不應該添加的東西)。對我來說這看起來不是很大,因爲它不允許簡單的方法來處理可能會隨着時間的推移發生的低效率,但這不是在這裏也不在那裏......EF Code First:可以轉換爲SQL的方法

無論如何,我知道我可以定義謂詞表達式將轉換到SQL,我可以在我的查詢中使用像這樣:

public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber) 
{ 
    return x => x.SomeProperty == comparisonNumber; 
} 

var query = MyEntities.Where(FilterMe(1)); 

這是唯一可能的返回bool表達式?我在尋找的線沿線的東西:

var query = from m in MyEntities 
      let endDate = GetEndDate(m.Start, m.Duration) 
      where endDate <= DateTime.Now 
      select m; 

是否有某種方式來建立一個表達功能GetEndDateGetEndDate中的代碼可以很好地轉化爲SQL,當我在查詢中長時間寫入代碼時,它很長,但是讀起來很混亂。

編輯 - 哦,並有人回答「使用SQL函數爲DateAdd」,我的例子就是這樣一個例子。有無數其他方式我想要使用它。提前致謝。

+0

你試過了嗎?即返回一個'Expression >',並進行查詢'where GetEndDate(m)<= DateTime.Now'。 – mellamokb

+0

是的,那是行不通的。你會得到「不能比較」表達式>和'DateTime'的內容。 – Ocelot20

+0

你試過我的答案了嗎? – Guillaume86

回答