none
怎么对DataView进行LinQ查询 RRS feed

  • 问题

  • 刚学LinQ,请朋友指点下怎么对DataView进行LinQ查询,下面我有个例子我的DataSet是类型化的。我对一个表和一个BindingSource进行连接查询,由于BindingSource.List在局部变量里面看到是DataView类型,所以做了如下查询
                var qpr = from Right in this.userli.QianFengDS.PostRights //类型化数据表
                          //只找到ToTable().AsEnumerable()方式能实现,但建个表很不爽
                          join post in ((DataView)this.bsEPost.List).ToTable().AsEnumerable()
                          on Right.PostID equals
                          post.Field <short>("PostID")
                          select Right;
    上面的查询能工作,但我很不想要ToTable(),请问要怎么写呢,还有上面这么写有什么不合理的吗

    2008年11月19日 2:26

答案

  •  台阶 写:

    刚学LinQ,请朋友指点下怎么对DataView进行LinQ查询,下面我有个例子我的DataSet是类型化的。我对一个表和一个BindingSource进行连接查询,由于BindingSource.List在局部变量里面看到是DataView类型,所以做了如下查询
                var qpr = from Right in this.userli.QianFengDS.PostRights //类型化数据表
                          //只找到ToTable().AsEnumerable()方式能实现,但建个表很不爽
                          join post in ((DataView)this.bsEPost.List).ToTable().AsEnumerable()
                          on Right.PostID equals
                          post.Field <short>("PostID")
                          select Right;
    上面的查询能工作,但我很不想要ToTable(),请问要怎么写呢,还有上面这么写有什么不合理的吗

    hi 你好  其实totable是正确的 

    dataview没有提供枚举的方法  但是dataview是包含着一个datatable实例的 所以totable不会产生什么大的消耗。

     

    另外 你的dataset既然是类型化的  在窗体里自然会有一个实例 作为BindingSource的datasource存在   你可以直接对这个dataset中的特定表进行linq查询哦  把查询结果扔到另一个BindingSource 显示出来也是可以的  不需要死守着第一个bindsource

     

    • 已标记为答案 台阶 2009年4月21日 0:36
    2008年11月20日 5:15
  • 你好,

    如果你用LINQ,那么就可以直接把LINQ当成一个数据对象进行绑定查询等操作,就可以抛弃传统的DataSet,DataView方法了.

     

     

    2008年11月19日 6:28

全部回复

  • 你好,

    如果你用LINQ,那么就可以直接把LINQ当成一个数据对象进行绑定查询等操作,就可以抛弃传统的DataSet,DataView方法了.

     

     

    2008年11月19日 6:28
  • 我对绑定中间件BindingSource比较喜欢,通过它我可以方便的获得用户操作的当前行,记录前进、后退等操作,而且它的表关系处理也方便。BindingSource就是DataView的。为了一个group by的问题昨天才去学LinQ的,貌似LinQ的水有点深,不敢全部投入它的怀抱。而且现在用的类型化数据集感觉和LinQ差不多(查询差些),想跟进LinQ但暂时不以它为主,看看形势再说。

    2008年11月19日 7:58
  •  台阶 写:

    刚学LinQ,请朋友指点下怎么对DataView进行LinQ查询,下面我有个例子我的DataSet是类型化的。我对一个表和一个BindingSource进行连接查询,由于BindingSource.List在局部变量里面看到是DataView类型,所以做了如下查询
                var qpr = from Right in this.userli.QianFengDS.PostRights //类型化数据表
                          //只找到ToTable().AsEnumerable()方式能实现,但建个表很不爽
                          join post in ((DataView)this.bsEPost.List).ToTable().AsEnumerable()
                          on Right.PostID equals
                          post.Field <short>("PostID")
                          select Right;
    上面的查询能工作,但我很不想要ToTable(),请问要怎么写呢,还有上面这么写有什么不合理的吗

    hi 你好  其实totable是正确的 

    dataview没有提供枚举的方法  但是dataview是包含着一个datatable实例的 所以totable不会产生什么大的消耗。

     

    另外 你的dataset既然是类型化的  在窗体里自然会有一个实例 作为BindingSource的datasource存在   你可以直接对这个dataset中的特定表进行linq查询哦  把查询结果扔到另一个BindingSource 显示出来也是可以的  不需要死守着第一个bindsource

     

    • 已标记为答案 台阶 2009年4月21日 0:36
    2008年11月20日 5:15
  • 谢谢韦兄,因为BindingSource里面有表关系及过滤形成的DataView,而我需要的是对该DataView的内容进行操作,所以对它处理方便点。因为瞄到点LinQ to object 也没仔细看所以想也许能直接LinQ操作DataView。既然"dataview没有提供枚举的方法  但是dataview是包含着一个datatable实例的 所以totable不会产生什么大的消耗。" 那就不考虑这个问题了,totable算了。

    2008年11月21日 2:10