Friday, October 01, 2010

Table Value Parameter with LINQ, (LINQ for Stored Procedure that has datatable as an input parameter)

Table Value Parameter with LINQ, (LINQ for Stored Procedure that has datatable as an input parameter)

If you are using LINQ to SQL with SQL server database then Visual Studio will not allow you to drag your SP into dbml file like you do for other simple SP and also Visual Studio will not able to generate the code for this. There is no other ways to generate the code for this situation (SP has input parameter as a datatable) in the DataContext.

You have to write the code into partial class (given with your .dbml file), now assume you have SP signature like below

Stored Procedure

CREATE PROCEDURE [dbo].[GetResource]

(@ResourceIDdbo.ResourceREADONLY)

Resource: is datatable type

CREATETYPE [dbo].[Resource] ASTABLE

([ResourceId] [int] NOTNULL)

While writing the code in the DataContext we have to manually execute the SP and return as a List, see below code

NameSpace

using System.Data.Linq;

using System.Data.Linq.Mapping;

using System.Linq;

using System.Linq.Expressions;

DataContext Code

publicpartialclassYourDataContext : System.Data.Linq.DataContext

{

publicIEnumerable<ResourceData> GetResource(List<int> resourceId)

{

DataTable resourceIdTable = new DataTable();

resourceIdTable.Columns.Add("Resource", typeof(int));

// Fill the datatable from the input List

foreach (int r in resourceId)

resourceIdTable.Rows.Add(r);

// "GetSqlCommand()" is a method will open the connection and return sqlCommand Object