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

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

    class BaseWellget

    {string

        public string WellNo { get; set; }class

        public string CasNo { get; set; }效率

        public Tub MyTub { get; set; } List

    }select

    class Tubgrid

    {  im

       public string TubNo { get; set; }数据

        public string TubName { get; set; }

   }

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


一种比较简单解决的方式是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();


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

相关文章
相关标签/搜索