2009-02-27 228 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;