当前位置: 首页 > 编程语言 > C#

LINQ-to-SQL:存储过程返回单个标量值?

时间:2023-04-10 16:52:49 C#

LINQ-to-SQL:存储过程返回单个标量值?我正在开发一个使用LINQ-to-SQL查询遗留数据库的应用程序。我需要调用一个选择整数值的存储过程。无法更改存储过程。设计者使用此签名创建一个方法:privateISingleResultNextRowNumber([Parameter(DbType="Int")]System.Nullableincrement,[Parameter(DbType="Char(3)")]stringdataset)我希望返回类型为是int。我如何使用LINQ-to-SQL执行此操作?使用标量函数(UDF)而不是SP是微不足道的。然而,它应该很容易——尽管如果SP很复杂(即FMT_ONLY不能100%检查它),那么你可能需要“帮助”它……这是我从一个返回的简化SP生成的一些dbml整数;您可以通过“使用...xml编辑器打开”来编辑dbml:(请注意,您显然需要调整名称和数据类型)。这是生成的C#:[Function(Name="dbo.foo")]publicintfoo([Parameter(DbType="Int")]System.Nullableinc,[Parameter(DbType="VarChar(20)")]stringdataset){IExecuteResultresult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())),inc,数据集);返回((int)(result.ReturnValue));如果您当前的SP使用SELECT(而不是RETURN),那么DBML将需要反映这一点。您可以通过隐藏实现细节并在部分类中提供公共包装器来解决此问题;eg:上面描述了一个返回单个表的SP;但我已将SP设为数据上下文的“私有”,结果类型为程序集的“内部”(隐藏它):[Function(Name="dbo.foo")]privateISingleResultFooPrivate([Parameter(DbType="Int")]System.Nullableinc,[Parameter(DbType="VarChar(20)")]stringdataset){IExecuteResultresult=this.ExecuteMethodCall(this,((MethodInfo)(MethodInfo.GetCurrentMethod())),公司,数据集);返回((ISingleResult)(result.ReturnValue));现在在我自己的类文件中,我可以在正确的命名空间中添加一个新的部分类(一个新的.cs文件),这样更方便地暴露方法:namespaceMyNamespace{partialclassMyDataContext{publicintFoo(int?inc,stringdataSet){returnFooPrivate(inc,dataSet).Single().value;}}}(命名空间和上下文名称需要与实际数据上下文相同)。这添加了一个公共方法,该方法对调用者隐藏脏话细节。不要直接编辑designer.cs文件;您的更改将会丢失。仅编辑dbml或部分类。返回@VALUE作为proc的最后一条语句。然后它会自动检测类型,如int、string、bool并相应地生成包装器方法。如果您在LinqtoSQL类项目中使用VisualStudio的.xsd文件,请确保:右键单击??适配器中的存储过程或函数调用。选择Properties将ExecutionMode更改为Scalar这将使您的适配器函数返回类型“Object”。然后你需要将它转换为int或string,或者任何它应该是的。以上是C#学习教程:LINQ-to-SQL:storedprocedurereturnsasinglescalarvalue?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: