2010-05-06 54 views
0

我想下面的語句轉移到亞音速2.2亞音速2加入多個列

SELECT b.* 
    FROM tableA a 
     INNER JOIN tableB b 
     ON (a.year = b.year AND a.month = b.monath AND a.userid = b.userid); 

我的問題是亞音速的SqlQuery.LeftInnerJoin()命令沒有超載這需要多個列。

由於任何加盟只能用where子句來重寫,我沒有在我的SQL如下:

SELECT b.* 
    FROM tableA a, tableB b 
    WHERE a.year = b.year 
     AND a.month = b.month 
     AND a.userid = b.userid 

應產生相同的結果(事實上,至少在MySQL的,有邏輯上是絕對沒有這些陳述之間的差異)。

但我也被卡住轉移到亞音速,因爲「IsEqualTo(...)」成員足夠聰明,以弄清楚我的參數是一個字符串,並將其放入引號。

DB.Select("TableB.*") 
    .From<TableA>() 
    .From<TableB>() 
    .Where(TableA.YearColumn).IsEqualTo("TableB.Year") 
    .And(TableA.MonthColumn).IsEqualTo("TableB.Month") 
    .And(TableA.UseridColumn).IsEqualTo("TableB.UserId") 

(我試着在設置IsEqualTo參數不同的方式)

IsEqualTo(TableB.YearColumn) 
IsEqualTo(TableB.YearColumn.QualifiedName) 

無論是參數視爲

TableA.Year = 'TableB.Year' 

或者我得到一個SqlQueryException。

有人可以告訴我如何做亞音速這個查詢(或者第一個 - 與JOIN或第二個)?謝謝

+0

您是否嘗試檢查正在生成的SQL語句?即 SubSonic.SqlQuery S =新SubSonic.Select()從(...; Console.WriteLine(s.ToString()); – sparks 2010-05-06 12:49:34

+0

是, 正如我所說亞音速胎面我的參數作爲一個字符串(不會導致失敗,但在這種情況下是錯誤的(SELECT * FROM tableA,tableB WHERE tableA.Year ='TableB.Year'將永遠不會返回一行) – 2010-05-07 06:19:49

回答

1

隨着SubSonic 2開箱,你不能。

這就是說,您有以下選擇:

擴展亞音速

如果你已經熟悉了亞音速,你可以考慮加入多列加入到亞音速本身。

使用視圖,存儲過程,表函數

如果你不想惹SubSonics代碼,在SQL Server中使用視圖,存儲過程和/或表函數。 SubSonic可以輕鬆地從視圖和存儲過程訪問數據。

使用InlineQuery

InlineQuery允許你執行任何SQL - 如果它是一個選項,裸SQL在你的代碼。

醜陋的解決方法與InlineQuery

如果你絕對要創建亞音速查詢,你可以試試這個:

SqlQuery q = DB.Select() 
    .From<TableA>() 
    .CrossJoin<TableB>() 
    .Where(TableA.YearColumn).IsEqualTo(0) 
    .And(TableA.MonthColumn).IsEqualTo(0) 
    .And(TableA.UseridColumn).IsEqualTo(0); 

構建SQL語句,並替換參數名:

string s = q.BuildSqlStatement(); 
s = s.Replace(q.Constraints[0].ParameterName, TableB.YearColumn.QualifiedName); 
s = s.Replace(q.Constraints[1].ParameterName, TableB.MonthColumn.QualifiedName); 
s = s.Replace(q.Constraints[2].ParameterName, TableB.UserIdColumn.QualifiedName); 

然後使用s和InlineQuery。

+0

我使用InlineQuery爲此,也許我會擴展亞音速源稍後如果我有一些空閒時間。 – 2010-06-03 21:00:42