C# 从c调用标量函数#

C# 从c调用标量函数#,c#,sql,entity-framework,C#,Sql,Entity Framework,我在sql数据库中有一个标量函数,我想使用linq到实体上下文调用它 尽管我知道,您可以使用以下语法调用表函数 [DbFunction("Context", "TableFunc")] public virtual IQueryable<ModelEntity> TableFunc(int Id) { var IdParam = new ObjectParameter("Id", typeof(int)) {

我在sql数据库中有一个标量函数,我想使用linq到实体上下文调用它

尽管我知道,您可以使用以下语法调用表函数

    [DbFunction("Context", "TableFunc")]
    public virtual IQueryable<ModelEntity> TableFunc(int 
     Id)
    {
        var IdParam = new ObjectParameter("Id", typeof(int))
        {
            Value = Id
        };
        return (this as IObjectContextAdapter).ObjectContext
            .CreateQuery<ModelEntity>(
                "Context.TableFunc(@Id)",IdParam);
    }
[DbFunction(“Context”,“TableFunc”)]
公共虚拟IQueryable TableFunc(int
Id)
{
var IdParam=新对象参数(“Id”,typeof(int))
{
值=Id
};
返回(作为IObjectContextAdapter)。ObjectContext
.CreateQuery(
“Context.TableFunc(@Id)”,IdParam);
}
然而,如果我在这里使用标量函数

我收到一个错误“未指定名称参数”

我的标量函数没有任何参数

更新: 标量函数调用

   [DbFunction("Context","GetValue")]
   public virtual IQueryable<short> GetValue()
    {
        return (this as  
     IObjectContextAdapter).ObjectContext.CreateQuery<short>
     ("Context.GetValue()");
    } 
[DbFunction(“Context”,“GetValue”)]
公共虚拟IQueryable GetValue()
{
返回(此为
IObjectContextAdapter).ObjectContext.CreateQuery
(“Context.GetValue()”);
} 

最近,我通过查看GitHub以及本文找到了解决方案。 幸运的是,该方法非常简单,只是没有用易读的方式编码,因此,我发现很难正确使用它

public partial class MainDbContext : DbContext
    {
//....
  [DbFunction("CodeFirstDatabaseSchema", "IsAssignedIncludedInPickedRoles")]
    public static bool IsAssignedIncludedInPickedRoles(string pickedRoles, string assignedRoles)
    {
        throw new NotSupportedException();
    }

//.....
}
模糊性出现在使用“CodeFirstDatabaseSchema”字符串本身的义务中,虽然它是文档的一部分,引导您使用dbContext名称或包含dbContext的名称空间,但这些都不是 第二件事是不需要在函数中编写代码,只需在种子方法中通过SqlCommand创建SQL函数,然后享受工作

 var rslt = await ctx.AssignedInstitutions.Where(e => MainDbContext.IsAssignedIncludedInPickedRoles(e.Roles, "ARIOB")).ToListAsync();

执行
.CreateQuery(“选择ScalarFunc()”)做什么?(将SELECT放在返回值的函数名之前)参数“name”不能为null、空或仅包含空格。您可以发布标量函数的代码吗?添加了标量函数。还尝试将SELECT放在上下文之前。GetValue()尝试
新建ObjectParameter(@Id),typeof(int))