Können Sie dies in der dbml bearbeiten? Persönlich neige ich dazu, die automatisch generierten Typen zu behandeln (von Funktionen und gespeicherte Prozeduren) als DTOs, die auf den DAL lokal sind, so dass ich sofort wieder ordnet sie zu meiner eigenen Darstellung POCO - also
var qry = from row in ctx.SomeProc(12345)
select new Foo {ID = row.ID, Name = row.Name };
usw. Zur zweiten Frage "Wie können Sie eine linq-Abfrage für die Ergebnismenge der gespeicherten Prozedur durchführen?" - Ich würde empfehlen, eine benutzerdefinierte Funktion statt einer gespeicherten Prozedur verwenden, wenn Sie es komponieren wollen: das Ihnen die Zusammensetzung bei der Datenbank erlaubt, zu tun, zum Beispiel Paging und Filtern:
var qry = (from row in ctx.SomeFunction(12345)
where row.IsActive
select row).Skip(10).Take(10);
welche soll (in LINQ-to -SQL mindestens) alles in TSQL auf dem Server tun. Andernfalls können Sie AsEnumerable()
aufrufen und verwenden LINQ-to-Objects bei dem rufenden .NET Schicht:
var qry = (from row in ctx.SomeProc(12345).AsEnumerable()
where row.IsActive
select row).Skip(10).Take(10);
Um die dbml zu bearbeiten (das ist nur xml), ändert sich die ElementType/@Name
hier:
<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>
Ein hilfreicher Artikel: http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html –