C# EF 6.x和带表值参数的函数

C# EF 6.x和带表值参数的函数,c#,sql-server,entity-framework,sql-server-2012,entity-framework-6,C#,Sql Server,Entity Framework,Sql Server 2012,Entity Framework 6,我有一个DB函数,需要一个表值参数作为参数(@c) 该函数是从EF设计器(首先是数据库)构建的,如下所示: [DbFunction("MyDbContext", "TestTbl")] public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x) { var xParameter = user.HasValue ? n

我有一个DB函数,需要一个表值参数作为参数(@c)

该函数是从EF设计器(首先是数据库)构建的,如下所示:

    [DbFunction("MyDbContext", "TestTbl")]
    public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x)
    {
        var xParameter = user.HasValue ?
            new ObjectParameter("x", x) :
            new ObjectParameter("x", typeof(System.String));

        return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestTbl_Result>("[MyDbContext].[TestTbl](@x)", xParameter);
    }
我不知道如何将@c参数传递给函数。有人能帮忙吗

提前谢谢


p、 美国:我使用的是MS SQL 2012(或更新版本)

您应该使用另一种方法ExecuteStoreQuery,该方法允许指定表值参数(SqlDbType.Structured)

使用(var table=newdatatable())
{
表.Columns.Add(“cs”,typeof(string));
foreach(项目中的var项目)
table.Rows.Add(item.CD.ToString());
var param1=新的SqlParameter(“@x”,SqlDbType.NVarChar)
{
Value=myValue
};
var param2=新的SqlParameter(“@c”,SqlDbType.Structured)
{
值=表
};
((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery(
“从[TestTbl](@x,@c)”中选择*,参数1,参数2);
}

它可能应该是一个数据表?
    [DbFunction("MyDbContext", "TestTbl")]
    public virtual IQueryable<TestTbl_Result> TestTbl(Nullable<System.String> x)
    {
        var xParameter = user.HasValue ?
            new ObjectParameter("x", x) :
            new ObjectParameter("x", typeof(System.String));

        return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<TestTbl_Result>("[MyDbContext].[TestTbl](@x)", xParameter);
    }
ex  {"An error occurred while executing the command definition. See the inner exception for details."}  System.Exception {System.Data.Entity.Core.EntityCommandExecutionException}
ex.InnerException   {"An insufficient number of arguments were supplied for the procedure or function TestTbl."}    System.Exception {System.Data.SqlClient.SqlException}
    using (var table = new DataTable ())
    {
        table.Columns.Add("cs", typeof(string));
        foreach (var item in ITEMS)
            table.Rows.Add(item.CD.ToString());

        var param1 = new SqlParameter("@x", SqlDbType.NVarChar)
        {
            Value = myValue
        };
        var param2 = new SqlParameter("@c", SqlDbType.Structured)
        {
            Value = table
        };

        ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery<TestTbl_Result>(
            "select * from [TestTbl](@x, @c)", param1, param2);

    }