Вызов хранимой процедуры с LINQ .ExecuteQuery для возврата неотображенных полей - PullRequest
3 голосов
/ 30 июня 2010

У меня есть хранимая процедура, которая возвращает все поля таблицы плюс одно, то есть:

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 Ответ

1 голос
/ 30 июня 2010

Одна вещь, которую вы можете сделать, это изменить вашу хранимую процедуру и поместить одну выходную переменную в эту

например:

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

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

решит вашу проблему, потому что, когда вы уроните эту процедуру в файл dbml desinger, она создаст одну переменную по умолчанию и вы сможете легко получить доступ к вашему коду

проверьте это для более подробной информации: http://mtaulty.com/CommunityServer/blogs/mike_taultys_blog/archive/2008/03/13/10236.aspx

...