Получение запроса Linq-toSql для отображения в GridView
-
02-07-2019 - |
Вопрос
У меня есть довольно сложный запрос Linq, который, похоже, я не могу получить в LinqDataSsource для использования в GridView:
IEnumerable<ticket> tikPart = (
from p in db.comments where
p.submitter == me.id &&
p.ticket.closed == DateTime.Parse("1/1/2001") &&
p.ticket.originating_group != me.sub_unit
select p.ticket
).Distinct();
Как я могу перенести это в GridView?Спасибо!
Решение
Вы можете настроить свой Gridview без использования источника данных.Настройте столбцы gridview и в codebehind привяжите этот результат к представлению сетки.
Другие советы
gridview.DataSource = tikPart.ToList();
gridview.DataBind();
@leppie - Нет необходимости вызывать ToList() для IQueryable при подключении его в качестве источника данных.
При условии, что ваш DataContext не был удален до вызова метода DataBind, ToList является избыточным вызовом.
По умолчанию DataContext использует отложенную загрузку, так что данные извлекаются из базы данных только при перечислении IQueryable.ToList() выполняет перечисление и выполняет вызов, то же самое делает DataBind().
Итак, вы можете сделать что-то вроде этого:
using(MyDataContext ctx = new MyDataContext(){
this.MyGridView.DataSource = from something in ctx.Somethings where something.SomeProperty == someValue select something;
this.MyGridView.DataBind();
}
В зависимости от того, как вы распоряжаетесь своим DataContext, определяется, что привязывать к источнику данных.
Затем вы можете либо использовать автоматически сгенерированные столбцы в GridView, чтобы каждое свойство в вашем возвращаемом объекте было преобразовано в столбец, либо вы можете написать столбцы с помощью конструктора и настроить там правила привязки.
Вы можете привязать IQueryable<> введите в GridView, используя элемент управления LinqDataSource. http://johnsobrepena.blogspot.com/2010/01/data-bind-coolgridview-to-iqueryable.html