3

テーブルのすべてのフィールドに 1 を加えた値を返すストアド プロシージャがあります。

tablename.*,count(suchandsuch)

もちろん、LINQ の 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;
}
4

1 に答える 1

1

できることの 1 つは、ストアド プロシージャを変更し、その中に 1 つの出力変数を配置することです。

例えば ​​:

  create procedure name 
    @var1 int,
    @var2 int output,
   as
  begin

   select @var2=count (columnname), * from tablename
  end

この手順を dbml desinger ファイルにドロップすると、デフォルトで out 変数が 1 つ作成され、コードで簡単にアクセスできるため、問題が解決します。

詳細については、これを確認してください: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/03/13/10236.aspx

于 2010-06-30T11:10:20.397 に答える