2009-02-27 111 views
6

如何將LINQ生成的存儲過程結果的類名更改爲SQL設計器(除了與designer.cs混淆)?LINQ to SQL:存儲過程結果

另外,如何對存儲過程的結果集執行linq查詢?

+0

有用的文章:http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html – 2009-02-27 14:02:22

回答

7

你能在DBML編輯此?就個人而言,我傾向於把自動生成的類型(從功能和存儲過程)作爲本地的DAL DTO的,所以我立即將它們重新映射到我自己的POCO表示 - 即

var qry = from row in ctx.SomeProc(12345) 
      select new Foo {ID = row.ID, Name = row.Name }; 

等。回答第二個問題「另外,如何對存儲過程的結果集執行linq查詢?」 - 如果你想創作它,我會建議使用UDF,而不是存儲過程的:這讓你做組成的數據庫,例如尋呼和過濾:

var qry = (from row in ctx.SomeFunction(12345) 
      where row.IsActive 
      select row).Skip(10).Take(10); 

這應該(在LINQ到-SQL至少)在服務器上使用TSQL完成所有工作。否則,您可以撥打AsEnumerable()並在調用.NET層使用LINQ到對象:

var qry = (from row in ctx.SomeProc(12345).AsEnumerable() 
      where row.IsActive 
      select row).Skip(10).Take(10); 

要編輯DBML(這只是XML),改變ElementType/@Name這裏:

<Function Name="dbo.CustOrderHist" Method="CustOrderHist"> 
    <Parameter Name="CustomerID" Parameter="customerID" Type="System.String" DbType="NChar(5)" /> 
    <ElementType Name="FooBar"> <!-- ********** HERE ************ --> 
     <Column Name="ProductName" Type="System.String" DbType="NVarChar(40) NOT NULL" CanBeNull="false" /> 
     <Column Name="Total" Type="System.Int32" DbType="Int" CanBeNull="true" /> 
    </ElementType> 
</Function> 
+0

啊!對 - 我錯過了一個「選擇行」;固定 – 2009-02-27 13:58:31

2

而且,你怎麼能對結果集的存儲 程序的執行LINQ查詢 ?

var query = from results in datacontext.storedprocedurename() 
      where results.whatever == 1 
      select results;