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

C# 获取Linq toSQL查询以显示在GridView上,c#,linq,linq-to-sql,gridview,C#,Linq,Linq To Sql,Gridview,我有一个相当复杂的Linq查询,我似乎无法进入LinqDataSource以在GridView中使用: IEnumerable<ticket> tikPart = ( from p in db.comments where p.submitter == me.id && p.ticket.closed == DateTime.Parse("1/1/2001") && p.ticket.ori

我有一个相当复杂的Linq查询,我似乎无法进入LinqDataSource以在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();
IEnumerable tikPart=(
从db中的p开始。注释,其中
p、 提交者==me.id&&
p、 ticket.closed==DateTime.Parse(“1/1/2001”)&
p、 ticket.origing_组!=me.sub_单位
选择p.ticket
).Distinct();

我怎样才能把它放到GridView中?谢谢大家!

您可以在没有数据源的情况下设置Gridview。设置gridview列,并在codebehind中将结果绑定到grid视图。

您可以在没有数据源的情况下设置gridview。设置gridview列,并在codebehind中将结果绑定到grid视图。

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

gridview.DataSource = tikPart.ToList();
gridview.DataBind();
假设在调用DataBind方法之前尚未处理DataContext,则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();
}
取决于数据上下文如何决定绑定到数据源的内容


然后,您可以在GridView上使用自动生成的列,以便将返回对象中的每个属性都转换为列,或者您可以使用设计器编写列并在其中设置绑定规则。

@leppie-在将iQueryTable作为数据源附加时,无需对其调用ToList()

假设在调用DataBind方法之前尚未处理DataContext,则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();
}
取决于数据上下文如何决定绑定到数据源的内容


然后,您可以在GridView上使用自动生成的列,以便将返回对象中的每个属性都转换为列,也可以使用设计器编写列并在其中设置绑定规则。

您可以使用LinqDataSource控件将IQueryable类型绑定到GridView

可以使用LinqDataSource控件将IQueryable类型绑定到GridView

哇。。。当我看到它时,这是如此简单。是否有任何方法可以将其放入数据源,以便我可以使用GridVIew的排序?可以使用对象数据源并将其绑定到返回该查询的方法。我从不使用LinqDatasource,因此我无法帮助您在执行我提到的方法时,您必须自己进行排序和分页。在LinqDataSource中使用上面的matts建议可能会更容易。如果您想对LinqToSqlDataSource或ObjectDataSource进行排序和分页,那么最好的方法就是使用动态表达式生成,否则会变得很难看(我的老板发现了!)哇。。。当我看到它时,这是如此简单。是否有任何方法可以将其放入数据源,以便我可以使用GridVIew的排序?可以使用对象数据源并将其绑定到返回该查询的方法。我从不使用LinqDatasource,因此我无法帮助您在执行我提到的方法时,您必须自己进行排序和分页。使用上面的matts建议和LinqDataSource可能会更容易。如果您想对LinqToSqlDataSource或ObjectDataSource进行排序和分页,那么最好的方法就是使用动态表达式生成,这可能会变得很糟糕(我的老板发现了!),谢谢您提供的额外信息。我仍然觉得DataSource属性需要一个IList:)leppie——您只需要确保您的数据源实现了IEnumerable。如果您检查了什么IList和IQueryable实现,您可以将其一直追溯到IEnumerable:)谢谢您提供的额外信息。我仍然觉得DataSource属性需要一个IList:)leppie——您只需要确保您的数据源实现了IEnumerable。如果您检查什么是IList和IQueryable实现,您可以一直跟踪到IEnumerable:)谢谢您的输入!你有什么例子可以让我看到这一点吗?我理解这个概念,但举个例子会有所帮助……它相当直截了当。使用GetData()等方法创建一个类。将objectdatasource添加到页面。使用智能标记进行设置,如果显示数据,则只需要选择查询。因此,请设置以调用您刚刚创建的classes方法。感谢您的输入!你有什么例子可以让我看到这一点吗?我理解这个概念,但举个例子会有所帮助……它相当直截了当。使用GetData()等方法创建一个类。将objectdatasource添加到页面。使用智能标记进行设置,如果显示数据,则只需要选择查询。因此,请将其设置为调用刚才创建的classes方法。