Привязать данные LINQ через хранимую процедуру к Gridview - PullRequest
1 голос
/ 16 июля 2009

Функция в dbml есть,

    [Function(Name = "dbo.sp_GetQuestions")]
    public ISingleResult<vw_QuestionMaster> sp_GetQuestions([Parameter(Name = "Sort", DbType = "Int")] System.Nullable<int> sort, [Parameter(Name = "Title", DbType = "VarChar(50)")] string title, [Parameter(Name = "Tags", DbType = "VarChar(50)")] string tags, [Parameter(Name = "RecordFrom", DbType = "Int")] System.Nullable<int> recordFrom, [Parameter(Name = "RecordTo", DbType = "Int")] System.Nullable<int> recordTo)
    {
        IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), sort, title, tags, recordFrom, recordTo);
        return ((ISingleResult<vw_QuestionMaster>)(result.ReturnValue));
    }

Функция, которую я определил в DataAccessLayer:

    public static ?????????????????? GetMostDiscussedQuestions()
    {
        using (AbToBolDataClassesDataContext db = new AbToBolDataClassesDataContext())
        {
            //ISingleResult<vw_QuestionMaster> questions = db.sp_GetQuestions(1, null, null, 1, 5);
            //return questions.ToList();

            var query = from qm in db.sp_GetQuestions(1, null, null, 1, 5)
                        select qm;

            return query;
        }
    }

Здесь, в этом случае, я вызываю вышеуказанный метод для установки источника данных вида сетки. Хотя я получаю данные в запросе, вызывая хранимую процедуру, но, пожалуйста, сообщите мне о том, какой должен быть правильный тип возврата для этого метода. и как извлечь то же самое из 'запроса'.

Я попытался с помощью query.ToList (), но выдает ошибку не-преобразования типа List <> в DataTable.

Ответы [ 3 ]

2 голосов
/ 16 июля 2009

Если вы не указали "Тип возврата" в своем конструкторе dbml, это будет автоматически сгенерированный тип, и вы не сможете легко вернуть его из метода.

Если вы зайдете в конструктор, выберите свой сохраненный процесс и на панели свойств измените тип возвращаемого значения, чтобы он совпадал с вашим представлением (при условии, что они оба возвращают одну и ту же структуру), вы сможете сохранить свой тип возвращаемого значения как представление, которое вы используете в настоящее время.

0 голосов
/ 11 октября 2013

Это ежу понятно.

Поскольку вы запускаете запрос Linq, он будет возвращать IEnumerable<T> как минимум независимо от того, какой тип времени выполнения будет.

Итак, вы можете вернуть IEnumerable<T> в качестве типа времени компиляции для вашего GetMostDiscussedQuestions метода.

Возвращение System.object, как вы уже сделали, будет работать, но будет включать приведение, которое может повлиять на производительность.

0 голосов
/ 16 июля 2009

решил это, :)

    public static object GetMostDiscussedQuestions()
    {
        using (AbToBolDataClassesDataContext db = new AbToBolDataClassesDataContext())
        {
            List<vw_QuestionMaster> query = db.sp_GetQuestions(1, null, null, 1, 5).ToList();

            return query;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...