2009-02-27 26 views
6

¿Cómo puedo cambiar el nombre de clase del resultado del procedimiento almacenado generado por LINQ to SQL designer (además de jugar con designer.cs)?LINQ to SQL: Resultados del procedimiento almacenado

Además, ¿cómo se puede realizar una consulta de linq en el conjunto de resultados del procedimiento almacenado?

+0

Un artículo útil: http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html –

Respuesta

7

¿Puede editar esta en el dbml? Personalmente, tiendo a tratar los tipos generados automáticamente (de funciones y procedimientos almacenados) como dtos que son locales a la DAL, así que inmediatamente re-mapa para mi propia representación POCO - es decir

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

etc. Re la segunda pregunta "Además, ¿cómo se puede realizar una consulta de linq en el conjunto de resultados del procedimiento almacenado?" - Yo recomiendo usar una UDF en lugar de un procedimiento almacenado si se quiere componer: esto le permite hacer la composición en la base de datos, por ejemplo, paginación y filtrado:

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

la que debe (en LINQ-a -SQL al menos) hacer todo en TSQL en el servidor. De lo contrario, puede llamar AsEnumerable() y utilizar LINQ a objetos en la capa de .NET llamando:

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

Para editar el dbml (que es sólo xml), cambia el ElementType/@Name aquí:

<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

¡Ah! Derecha - Me perdí una "fila de selección"; fijo –

+0

DOH! ¿Sabes lo que realmente ayuda cuando trabajas con LINQ? utilizando System.Linq; –

2

Además, ¿cómo se puede realizar una consulta LINQ en el conjunto de resultados del procedimiento almacenado ?

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