2009-09-15 102 views
0

我有一個SqlQuery類,看起來像這樣的極品解釋:亞音速2.1:SqlQuery.ExecuteJoinedDataSet()

  SqlQuery query = 
      DB.Select(
       Order.Schema.TableName + ".*", 
       OrderDetail.Schema.TableName + ".*") 
       .From<Order>() 
        .InnerJoin<OrderDetail>() 
      .Where(Order.IdColumn).IsEqualTo(1); 

現在我希望法SqlQuery.ExecuteJoindDataSet()來生成我的數據集,包含2個DataTables(一個用於訂單,一個用於OrderDetails)並將一個DataRelation放入DataSet中,所以我不必親自去做。

但ExecuteJoinedDataSet()只生成含有的OrderDetail從訂單中的所有數據,但沒有一個表:

// Order = 104 Columns 
    // OrderDetail = 74 Columns 
    query.ExecuteJoinedDataSet().Tables.Count => 1 
    query.ExecuteJoinedDataSet().Tables[0].Columns.Count => 104 
    query.ExecuteDataSet().Tables[0].Columns.Count => 177 

我覺得我是在正確的道路,但有人告訴我,我在做什麼錯誤?

這樣做的目的是在我的項目中使用的打印組件不接受通用對象,而是將DataSet作爲數據源。

回答

1

ExecuteJoinedDataSet實際上使用第一個表中的所有表列,並將具有外鍵的任何列中的值替換爲外表中相應行的第一個非forgeign-key值。它爲非空外鍵列進行內連接,併爲可爲空的連接留下連接。

因此,對於這個模式

create table tblBaseType 
(
id int not null primary key identity(1,1), 
name not null varchar(100) unique 
) 

create table tblBaseLocation 
(
id int not null primary key identity(1,1), 
name not null varchar(100) unique 
) 

create table tblBase 
(
id int not null primary key identity(1,1), 
name varchar(100) not null unique, 
baseTypeID int not null references tblBaseType(id), 
baseLocationID int null references tblBaseLocation(id) 
) 

和像

SqlQuery q = new Select().From(TblBase.Schema).Where(TblBase.IdColumn).IsEqualTo(1); 
DataSet ds = q.ExecuteJoinedDataSet(); 

SQLQuery對會產生這個近似SQL:

select tblBase.Id, 
tblBase.Name, 
tblBaseType.Name as baseTypeId, 
tblBaseLocation.name as baseLocationId 
from tblBase 
inner join tblBaseType on tblBase.baseTypeID = tblBaseType.id 
left join tblBaseLocation on tblBase.baseLocationID = tblBaseLocation.id 

實際的SQL是完全合格的,這僅僅是一個粗糙的從零開始的近似值。

+1

對不起,不使用Northwind示例。目前沒有副本。 :) – 2009-09-16 01:24:22

+0

很好的解釋。但令人遺憾的是,這使得ExecuteJoinedDataSet()無法用於我的目的。目前我正在編寫自己的方法,它將生成具有多個鏈接表的數據集。 – 2009-09-16 05:56:12

+0

聽起來很酷。你是否要使它成爲ExecuteJoinedDataSet()的重載並在github上提交它?那會搖擺。我也喜歡在表格之間添加DataRelations,但聽起來很複雜,無法正確使用。 – 2009-09-18 20:59:53