代码之家  ›  专栏  ›  技术社区  ›  Matt W

使用linq.executequery调用存储过程以返回未映射的字段

  •  3
  • Matt W  · 技术社区  · 15 年前

    我有一个存储过程,它返回一个表的所有字段加上一个,即:

    tablename.*,count(suchandsuch)
    

    当然,当通过linqs executequery执行此操作时,我可以在IEnumerable<>中返回表类的实例,但我还需要存储过程附加的额外字段。

    这可能吗?

    我当前的代码如下:

    public class CategoryWithInstanceCount : DataAccess.Category
    {
        [System.Data.Linq.Mapping.Column(Storage = "_Instances", DbType = "Int NOT NULL")]
        public int Instances { get; set; }
    }
    
    protected IEnumerable<CategoryWithInstanceCount> GetCategories(int? parentid)
    {
        PriceDataContext context = new PriceDataContext(ConfigurationManager.ConnectionStrings["connStr"].ConnectionString);
        IEnumerable<CategoryWithInstanceCount> ie = context.ExecuteQuery<CategoryWithInstanceCount>(
            String.Format("EXEC [dbo].[GetCategoryFromParentID] @parentcategoryid = {0}", parentid == null ? "NULL" : parentid.ToString())
            );
        return ie;
    }
    
    1 回复  |  直到 15 年前
        1
  •  1
  •   Pranay Rana    15 年前

    您可以做的一件事是修改存储过程并在其中放入一个输出变量

    例如:

      create procedure name 
        @var1 int,
        @var2 int output,
       as
      begin
    
       select @var2=count (columnname), * from tablename
      end
    

    将解决您的问题,因为当您将此过程放到dbml desinger文件中时,默认情况下它将创建一个out变量,并且您可以很容易地在代码中访问它吗?

    请检查此项以了解更多详细信息: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/03/13/10236.aspx