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

本文介绍了一种在DataGridView中绑定IList数据的有效方法,特别是针对包含关联对象的情况。通过LINQ查询转换原始IList数据,使其能直接在DataGridView中显示关联对象的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    对于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的数据。


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


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


转载于:https://my.oschina.net/u/577601/blog/82195

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值