2009-08-02 68 views

回答

3

您將根據連接中包含的表提供列。例如,如果你是加盟表跨和TRANSID表UserTrans,你的聲明將是沿着以下線的東西:

SubSonic.SqlQuery query = DB.Select() 
    .From(Trans.Schema) 
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn); 

按照SubSonic Simple Query Tool Docs,你有三個選擇,當涉及到左外連接:

左外連接使用泛型

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From<Customer>() 
     .LeftOuterJoin<Order>(); 

左外連接用模式

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From(Customer.Schema) 
     .LeftOuterJoin(Order.CustomerIDColumn, Customer.CustomerIDColumn); 

左外連接隨着魔術字符串

SubSonic.SqlQuery query = DB.Select(Aggregate.GroupBy("CompanyName")) 
     .From("Customers") 
     .LeftOuterJoin("Orders"); 

看來你是有利於「左外連接用模式。」但是請注意,上述每個選項都會返回一個SubSonic SqlQuery參考。我不確定你可以如你所願做什麼,用LeftOuterJoin語法返回一個Tran列表。你可能希望進一步諮詢這方面的文檔。

UPDATE:

根據您的意見,我認爲我們可以讓你更接近你想要什麼。 .LeftOuterJoin除了類型TableSchema.TableColumn類型的爭論,並且您可以通過將.ExecuteTypedList>添加到select來生成一個通用列表。

List<Tran> result = DB.Select() 
    .From<Trans>() 
    // parameters are of type TableSchema.TableColumn 
    .LeftOuterJoin(Trans.TransIDColumn, UserTrans.TransIDColumn); 
    .ExecuteTypedList<Tran>(); 
+0

感謝您的反饋意見。我猜想我被我的表對象在3.0.0.3中沒有Schema屬性,我也找不到IColumn類型的列引用。我發現在版本3中使用的唯一方法是使用泛型的方法。參考文檔似乎只完全適用於版本2.感謝您指引我朝着正確的方向發展。 – jcomet 2009-08-03 13:07:24

2

jcomet,您的配置不正確。本是錯誤的:他的代碼只適用於2.x而不是3.0.x,我知道第一手因爲我有同樣的問題。已經做出重大更改,導致上述代碼不再起作用。爲了讓你的問題更進一步,數據庫中的每個表現在都有兩個類;例如:「客戶」和「CustomersTable」。您會發現,如果您可以找出如何使用DataProvider實例化CustomersTable對象,則可以引用列,並以IColumn格式返回它們,而不是字符串格式。祝你好運,Ben,在你嘗試回答問題之前更新你的SubSonic。