對於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();
不知道這種方式效率會不會也不好,但這是我找到的相對較好的解決方式吧