【问题标题】:Getting a Linq-toSQL query to show up on a GridView让 Linq-to SQL 查询显示在 GridView 上
【发布时间】:2008-09-27 07:46:02
【问题描述】:

我有一个相当复杂的 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?谢谢!

【问题讨论】:

    标签: c# linq linq-to-sql gridview


    【解决方案1】:
    gridview.DataSource = tikPart.ToList();
    gridview.DataBind();
    

    【讨论】:

    • 哇...当我看到它时,这太简单了。有什么方法可以将它放入 DataSource 中,以便我可以使用 GridVIew 的排序?
    • 您可以使用对象数据源并将其绑定到返回该查询的方法。我从不使用 LinqDatasource,所以我帮不上忙
    • 按照我提到的方法,你必须自己进行排序和分页。使用上面的 matts 建议和 LinqDataSource 可能会更容易。
    • 如果你想对 LinqToSqlDataSource 或 ObjectDataSource 进行排序和分页是最好的方法,否则你必须使用动态表达式生成,这会变得很难看(我的老板发现了!)跨度>
    【解决方案2】:

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

    如果您的 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 上使用自动生成的列,以便返回对象中的每个属性都变成一列,或者您可以使用设计器编写列并在那里设置绑定规则。

    【讨论】:

    • 感谢您提供额外信息。我仍然认为 DataSource 属性需要一个 IList :)
    • leppie - 您只需要确保您的数据源实现了 IEnumerable。如果你检查 IList 和 IQueryable 实现了什么,你可以一直追溯到 IEnumerable :)
    【解决方案3】:

    您可以在没有数据源的情况下设置 Gridview。设置 gridview 列,并在代码隐藏中将该结果绑定到网格视图。

    【讨论】:

    • 感谢您的意见!你有什么例子可以让我看到这个吗?我理解这个概念,但举个例子会有所帮助......
    • 它相当直截了当。使用 GetData() 等方法创建一个类。将 objectdatasource 添加到您的页面。使用智能标签进行设置,显示数据时只需要选择查询。所以设置它来调用你刚刚创建的类方法。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多