【问题标题】:LINQ stored procedure return value to a string array?LINQ存储过程返回值到字符串数组?
【发布时间】:2011-03-24 15:21:32
【问题描述】:

我在 DBML 中有一个存储过程,我尝试将结果作为数组(一维数组)传递给“sqlQryArray”。但是底部代码会导致错误,如下面的消息。还需要做什么?

错误 1“aaaDatabase.stp_GetSomethingResult 的一维数组”类型的值无法转换为“String 的一维数组”,因为“aaaDatabase.stp_GetSomethingResult”不是从“String”派生的。

存储过程的返回结果只是学生名字的列表(只有一列)

Dim sqlQry = aaaLINQ.stp_GetSomething(bbb,ccc,ddd)

Dim sqlQryArray As String() = sqlQry.ToArray()

【问题讨论】:

  • 您能否向我们展示您的存储过程的返回类型,就像它在您的 DBML 映射文件中一样?
  • 是这样吗? Return CType(result.ReturnValue,ISingleResult(Of stp_GetSomethingResult))

标签: vb.net visual-studio-2010 stored-procedures linq-to-sql


【解决方案1】:

一些背景
存储过程结果返回后,将其转换为实现 IEnumerable 的 ISingleResult,并返回给调用客户端。由于 ISingleResult 是一个泛型类,因此创建了一个与存储过程同名的对象,其属性与存储过程返回的属性相同。

使用存储过程时,它们只能返回 ISingleResult 或 IMultipleResult 类型的项目。这在使用创建的对象时会导致许多问题。首先,如果要将对象绑定到数据源,则必须在客户端代码中手动将结果转换为 ToList() 之类的内容。如果您将对象转换为列表,那么它们将不会被更改跟踪。最后,在使用存储过程时,您无法从延迟加载中受益,因为在调用方法时会执行对数据库的调用。

在此处阅读完整文章:http://blog.benhall.me.uk/2008/05/linq-to-sql-stored-procedure-vs.html

也检查一下:一种可能的解决方案,您可以立即将结果重新映射到您自己的 POCO 表示。您还可以使用 LINQ 查询来操作您的结果:

LINQ to SQL: Stored Procedure Results

【讨论】:

  • 这是我没有想到的。感谢您的文章。
【解决方案2】:

你的存储过程的结果可能是一个类似这样的记录(POCO C# 表示法,我希望你能看懂):

 class Student {
     public string Name { get; set; }
 }

所以声明:

 sqlQry.ToArray()

返回一组学生对象。如果您只需要名称,请从记录中选择名称:

 sqlQuery.Select(student => student.Name).ToArray()

这将返回一个字符串数组(包含学生姓名)。

(对不起所有 C# 中的示例,我的 VB 技能在没有智能感知的情况下无法键入代码)。

【讨论】:

    猜你喜欢
    • 2011-10-19
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-10
    相关资源
    最近更新 更多