获取Linq-toSQL查询以显示在GridView上

时间:2020-03-06 14:49:14  来源:igfitidea点击:

我有一个非常复杂的Linq查询,似乎无法进入用于GridView的LinqDataSsource:

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.DataSource = tikPart.ToList();
gridview.DataBind();

我们可以不使用数据源来设置Gridview。设置gridview列,然后在代码背后将该结果绑定到网格视图。

@leppie将IQueryable添加为数据源时,无需在IQueryable上调用ToList()。

如果在调用DataBind方法之前尚未处理掉DataContext,则为冗余调用。

默认情况下,DataContext使用延迟加载,因此仅当枚举IQueryable时才从数据库中获取数据。 ToList()执行一个Enumeration并进行调用,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上使用自动生成的列,以便将返回的对象中的每个属性转换为一列,或者可以与设计器一起编写这些列并在那里设置绑定规则。

我们可以使用LinqDataSource控件将IQueryable <>类型绑定到GridView。 http://johnsobrepena.blogspot.com/2010/01/data-bind-coolgridview-to-iqueryable.html