NHiberate多表查询结果绑定到Datagridview控件

    对于Datagridview控件,数据源类型可以是dataset或者是IList类型等。以前datagridview绑定的数据源都是习惯用dataset的,但NHiberate查询返回结果都是以IList形式的。可以将IList转换为dataset再绑定到datagridview,也不是很难的事,网上也有现成的代码,但这样效率是不是会很低呢?我是怀疑的,要是几十条几百条数据还好,如果有成千上万条数据那样做的话我想肯定会很慢的。对于单表查询的结果datagridview绑定IList很容易,但对于多表查询有依赖关系(表中有外键)的IList就不那么好处理了。如下代码示例

    class BaseWell

    {

        public string WellNo { get; set; }

        public string CasNo { get; set; }

        public Tub MyTub { get; set; } 

    }

    class Tub

    {  

       public string TubNo { get; set; }

        public string TubName { get; set; }

   }

现有datagridview 控件dataGridview1,在NHiberate返回的结果是IList<BaseWell>类型的wells,若直接将其赋值dataGridView1.DataSource=wells,将无法显示MyTub的数据。

NHiberate多表查询结果绑定到Datagridview控件

一种比较简单解决的方式是linq 查询IList得到一个新的IList,代码如下

IList<BaseWell> wells = new List<BaseWell>();

            Tub t0 = new Tub { TubNo = "t000", TubName = "管0" };

            Tub t1 = new Tub { TubNo = "t001", TubName = "管1" };

            BaseWell well0 = new BaseWell { WellNo = "a000", CasNo = "c000",MyTub=t0 };

            BaseWell well1 = new BaseWell { WellNo = "a001", CasNo = "c001" ,MyTub=t1};wells.Add(well0);

            wells.Add(well1);

            var query = from w in wells select new { wellno = w.WellNo, tubno = w.MyTub.TubNo, tubname = w.MyTub.TubName, casno = w.CasNo };

            dataGridView1.DataSource = query.ToList();

NHiberate多表查询结果绑定到Datagridview控件

不知道这种方式效率会不会也很差,但这是我找到的相对较好的解决方式吧


你可能感兴趣的:(多表查询,ilist,NHiberate,绑定DataGridview)