关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题

DBML:

[Function(Name="dbo.p_GetStudyStageSubjectGroup")]
 public ISingleResult<STUDYSTAGE_SUBJECTGROUP__QRM> p_GetStudyStageSubjectGroup([Parameter(Name = "TimePoints", DbType = "DateTime")] System.Nullable<System.DateTime> timePoints)
 {
     IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), timePoints);
     return ((ISingleResult<STUDYSTAGE_SUBJECTGROUP__QRM>)(result.ReturnValue));
 }

后台.cs页面:

DataContextSetUp context = new DataContextSetUp();ISingleResult<STUDYSTAGE_SUBJECTGROUP__QRM> result = context.p_GetStudyStageSubjectGroup(DateTime.Now);                        this.ListView1.DataSource = result;this.ListView1.DataBind();

运行会报错:“无法枚举查询结果多次。”

查了国外的资料发现,因为linq to sql的ISingleResult<T>输出不能被列举计算大于1次。

比如当你绑定ISingleResult<T>到一个下拉框列表,结果被枚举计算并且下拉框增加了数据;然后如果你再次绑定同样的ISingleResult<T>实例到同一个控件,它会发现它的数据源和先前的一样(通过对象引用参照),最后它就不会再一次的枚举计算该ISingleResult<T>实例。

为了解决这个问题,现有两种方法可以提供:

1、实现自己的ISingleResult<T>

public class WrapperResult<T> : ISingleResult<T>
    {
        #region Fields

        List<T> results;
        object returnValue;

        #endregion

        #region Constructor

        public WrapperResult(ISingleResult<T> inner)
        {
            results = inner.ToList();
            returnValue = inner.ReturnValue;
        }

        #endregion

        #region IEnumerable<T> Members

        public IEnumerator<T> GetEnumerator()
        {
            return results.GetEnumerator();
        }

        #endregion

        #region IEnumerable Members

        IEnumerator IEnumerable.GetEnumerator()
        {
            return ((IEnumerable)results).GetEnumerator();
        }

        #endregion

        #region IFunctionResult Members

        public object ReturnValue
        {
            get { return returnValue; }
        }

        #endregion

        #region IDisposable Members

        public void Dispose()
        {
        }

        #endregion
    }

详细可见http://social.msdn.microsoft.com/Forums/en/linqprojectgeneral/thread/f403e047-e38c-45ab-9155-dbf83c6cc2fa

2、直接把ISingleResult<T>转换为.toList<T>()

DataContextSetUp context = new DataContextSetUp();List<STUDYSTAGE_SUBJECTGROUP__QRM> result = context.p_GetStudyStageSubjectGroup(DateTime.Now).ToList();                       this.ListView1.DataSource = result;this.ListView1.DataBind();

时间: 2024-10-14 22:04:28

关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题的相关文章

Linq to Sql : 动态构造Expression进行动态查询

原文:Linq to Sql : 动态构造Expression进行动态查询 前一篇在介绍动态查询时,提到一个问题:如何根据用户的输入条件,动态构造这个过滤条件表达式呢?Expression<Func<ProductExt, bool>> predicate t => t.ProductName.Contains("che") && t.UnitPrice >= 22; 理想情况下,我希望可以像下面这样来构造predicate,这样,我

LINQ to SQL 调用 SQL Server 的系统函数

?  简介 在 C# 中比较常用的 ORM(Object Relational Mapping)框架就是 EF 了,EF 经常结合 LINQ to SQL 来操作数据库.本文主要讨论如何在 LINQ to SQL 语法中调用 SQL Server 的内置函数,或者系统函数.主要使用以下静态类实现: 1.   DbFunctions 类 1)   位于 EntityFramework.dll(EF6.0) 程序集的 System.Data.Entity 命名空间中,适用于EF6.0 的版本. 2)

SQL 调用存储过程

--1调用存储过程 exec 存储过程名 参数 --2当表使用 select a.*,b.* from tb b inner join ( select * from openrowset('sqloledb','ip/server';'sa';'pwd','exec 库.dbo.存储过程'))a on a.条件=b.条件 

Linq to sql 实现多条件的动态查询(方法一)

/// <summary> /// Linq to sql 多字段动态查询 /// </summary> /// <returns></returns> private List<TVacant> ViewBinding(ModelDataContext db,string fyno,string brd,string area,string city,string pos) { Expression<Func<TVacant, bo

SQL调用存储过程错误Internal error when parsing callable statement metadata (missing parameter type)

[6 Apr 2005 15:29] Chadwick Baatz Description: When calling a stored procedure with datatype Decimal(m,d) (i.e. Decimal(18,0)) the Connector/J library throws the exception below. After looking into the code it appears that the getCallStmtParameterTyp

Linq to sql 结合Entity Framework 的连接查询总结

最近在做项目使用linq结合EntityFramework来处理数据库的操作.想来也用了快一年了,发现有些使用技巧是需要注意下,特做下总结,希望对刚入门的朋友们有所帮助.刚开始用的时候各总循环查询子查询,结果性能差得不行,现在看看都觉得好笑.也只有写出过很烂的代码才知道怎么样的代码才是优雅的吧,哈哈.我先总结下连接查询吧,发现很多刚入门的朋友和我一样,不知道怎么用linq写类似与sql的连接查询(left join.inner join等等). 连接查询 内连接查询 linq语法如下: 1 va

LINQ TO SQL 中的join(转帖)

http://www.cnblogs.com/ASPNET2008/archive/2008/12/21/1358152.html join对于喜欢写SQL的朋友来说还是比较实用,也比较容易接受的东西.在LINQ TO SQL中,写多表查询,同样可以写join,只是它有它自己的语法要求而已,语义都是一样的,下面我来讲下LINQ TO SQL中的join最基本的形式:都是最简单的,当然还有其它方面的内容,如:怎样加上过滤条件,如何分组,如何排序等等,为了单纯说join的用法,这里就简化下. Cod

使用CallableStatement接口调用存储过程

直接上下代码: 1 package com.learn.jdbc.chap07; 2 3 import java.sql.CallableStatement; 4 import java.sql.Connection; 5 import java.sql.Types; 6 7 import com.learn.jdbc.util.DbUtil; 8 9 /** 10 * 使用CallableStatement接口调用存储过程 11 * @author Administrator 12 * 13

LINQ TO SQL和Entity Framework 的关系 你了解多少?

1. LINQ  TO SQL 和EF 特点:  LINQ TO SQL和Entity Framework都是一种包含LINQ功能的ORM 也就是所谓的关系对象的映射.其中包括的有DBFrist  Code Frist    ModeL  Frist   三种中方式 来进行和数据库之间的访问.只是形式不同而已本质没有什么区别.都是ORM  之间的转化.最终都是来进行访问底层的数据库的对象 和服务. 简单来说LINQ是为了满足不知道怎么操作数据库的程序员开发设计的,LinQ 可以让他们以一种面向数