2011-06-05 23 views
2

我想使用LINQ像這樣:如何使用C#方法在SQL存儲過程

MyDBEntities context = new MyDBEntities(); 
context.MyTable.Where(i => MyMethod(i.column, valueToTest).ToList(); 

public bool MyMethod(Object a, Object b) 

但顯然使用這樣的方法與不可能

所以我跳,我可以在存儲過程中使用了Methode我將能夠使用LINQ調用

你想想這有可能嗎?

+1

我很抱歉,但你的問題沒有意義,標題談到一個存儲過程,你的示例代碼使用(我假設)Linq2Sql,你試圖達到什麼,只是壞...我想你正在尋找CLR存儲過程。 http://msdn.microsoft.com/en-us/library/ms131094.aspx - 但是,你想做什麼,SQL不允許你已經做? – Phill 2011-06-05 22:28:34

+0

@Phill,看起來他想寫一個方法,將指定的列與指定的值進行比較,並根據結果返回一個bool。 – 2011-06-05 22:37:49

+0

@尼克 - 這是一個模糊的問題,我不確定爲什麼它被提升了,沒有太多的事情需要去做,也沒有太多的假設。 – Phill 2011-06-05 23:41:41

回答

4

一般來說是可以創建C#的功能,並在SQL Server中使用它(2005年和更新),但它並非如此簡單 - 你必須使用SQL CLR,這意味着爲你的函數,特殊引用,特殊類型等分離項目。最後,你必須將程序集部署到SQL服務器才能使用SQL中的函數。一般文檔還涵蓋了如何創建自定義函數:

Creating SQL Server Objects in Managed Code

一旦你有你的SQL服務器上的功能,可以存儲過程中使用它,你可以在查詢中使用它。實際上,我不確定是否可以將這些函數導入Linq-to-sql或EF模型,並在Linq-to-sql或Linq-to-entities查詢中使用它們。

2

看看這裏爲一個完整的示例:

Calling custom methods in LINQ-to-SQL

+2

恐怕這隻適用於非常小的函數子集,因爲您不能映射任意函數--SQL不知道如何執行它。它僅適用於內部映射到SQL對應項的函數,如'Math.xxx','String.xxx'等。 – 2011-06-05 22:33:42

0

我希望我能正確理解你。

假設MyTable的是包含列Name數據庫表,並Address 這裏是你將如何得到一個值返回的結果中是否包含你通過指定的值。

public void SomeMethod() 
    { 
     MyTable table= new MyTable(); 

     bool b= MyMethod(table.Name, "Fred"); 
     if(b) 
     //Do something 
     else 
     //Do something else 
    } 

    public bool MyMethod(MyTable a, object value) 
    { 
     using(var context= new MyDBEntities()) 
     { 
      return context.MyTable.Where(i => a == value).Any(); 
     } 
    } 

這是數據庫表「MyTable的」模樣的幕後。(數據上下文生成此)什麼

public class MyTable 
{ 
    public string Name { get; set; } 
    public string Address { get; set; } 
} 

所以,你可以在我通過table.NameMyMethod第一種方法看,這是唯一可能的,因爲MyTable有一個名爲Name的公共財產。另外請注意,我們使用的是Object類型的值,因爲參數可以是一個int,一個字符串,一個日期時間,誰知道。

注意:這是未經測試的代碼,但如果我正確理解您的話,應該正確地跟蹤。

相關問題