Ottenere una query Linq-to SQL da mostrare su GridView
-
02-07-2019 - |
Domanda
Ho una query Linq piuttosto complicata che non riesco a trovare in un LinqDataSsource da utilizzare in un 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();
Come posso ottenere questo in un GridView? Grazie!
Soluzione
È possibile configurare Gridview senza origine dati. Imposta le colonne gridview e, in codebehind, associa quel risultato alla vista grid.
Altri suggerimenti
gridview.DataSource = tikPart.ToList();
gridview.DataBind();
@leppie - Non è necessario chiamare un ToList () su IQueryable quando lo si collega come origine dati.
A condizione che DataContext non sia stato eliminato prima che il metodo DataBind chiamato ToList sia una chiamata ridondante.
Per impostazione predefinita, DataContext utilizza il caricamento lento, in modo che i dati vengano recuperati dal database solo quando IQueryable è enumerato. ToList () esegue un'enumerazione ed effettua la chiamata, così come DataBind ().
Quindi puoi fare qualcosa del genere:
using(MyDataContext ctx = new MyDataContext(){
this.MyGridView.DataSource = from something in ctx.Somethings where something.SomeProperty == someValue select something;
this.MyGridView.DataBind();
}
A seconda di come lo smaltimento di DataContext determina cosa associare a un'origine dati.
Puoi quindi utilizzare le colonne generate automaticamente su GridView, in modo che ogni proprietà dell'oggetto restituito venga trasformata in una colonna, oppure puoi scrivere le colonne con il designer e impostare lì le regole di associazione.
Puoi associare IQueryable < > digitare su GridView utilizzando il controllo LinqDataSource. http://johnsobrepena.blogspot.com/2010/ 01 / data-bind-coolgridview-to-iqueryable.html