如何在sql存储过程中使用c方法

本文关键字:方法 过程中 存储过程 sql 存储 | 更新日期: 2023-09-27 17:58:23

我想按如下方式使用linq:

MyDBEntities context = new MyDBEntities();
context.MyTable.Where(i => MyMethod(i.column, valueToTest).ToList();

带有

public bool MyMethod(Object a, Object b)

但显然使用这种方法是不可能的

所以我在跳,我可以在存储过程中使用该方法,我可以用linq 调用

你认为有可能吗?

如何在sql存储过程中使用c方法

通常可以创建C#函数并在SQL Server(2005及更新版本)中使用它,但它并不那么简单-您必须使用SQL CLR,这意味着您的函数需要单独的项目、特殊引用、特殊类型等。最后,您必须将程序集部署到SQL Server才能在SQL中使用该函数。一般文档也涵盖了如何创建自定义功能:

在托管代码中创建SQL Server对象

一旦您在SQL server上拥有了函数,就可以在存储过程中使用它,也可以在查询中使用它。实际上,我不确定是否可以将这些函数导入到Linq-to-sql或EF模型中,并在Linq-to-sql或Linq-to-entities查询中使用它们。

在这里查看完整的示例:

在LINQ中调用SQL 的自定义方法

我希望我能正确理解你。

假设MyTable是一个包含列NameAddress的数据库表以下是如何在结果中是否包含您传递的指定值的情况下返回值。

public void SomeMethod()
    {
        MyTable table= new MyTable();
        bool b=  MyMethod(table.Name, "Fred");
       if(b)
         //Do something
       else
         //Do something else
    }
    public bool MyMethod(MyTable a, object value)
    {
        using(var context= new MyDBEntities())
        {
            return context.MyTable.Where(i => a == value).Any();
        }
    }

这就是数据库表"MyTable"在幕后的样子。(数据上下文生成此)

public class MyTable
{
    public string Name { get; set; }
    public string Address { get; set; }
}

所以你可以看到,在第一个方法中,我将table.Name传递给MyMethod,这是可能的,因为MyTable有一个名为Name的公共属性。还要注意,我们使用Object类型作为值,因为参数可以是int、字符串、日期时间,谁知道呢。

注意:这是未经测试的代码,但如果我理解正确的话,应该会步入正轨。