2010-06-30 2 views
3

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

tablename.*,count(suchandsuch) 

Конечно, при выполнении этого через LINQs ExecuteQuery Я могу вернуть экземпляры класса таблицы в IEnumerable <>, но мне также нужно дополнительное поле, на которое хранится хранимый proc.

Возможно ли это?

Мой текущий код выглядит следующим образом:

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

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

, например:

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

+0

Интересно. Правильно ли я полагаю, что метод ExecutQuery не достаточно мощный, чтобы обеспечить тип пользовательского вызова, который я пытаюсь получить? Я думал, что будет замена. –

+0

Я просто хочу сказать, что вы используете buit в объекте avaialble. когда когда-либо я захочу вычитать запрос, который возвращает одно значение или не обрабатывает структуру таблицы, я использую метод ExecuteQuery linq –