2010-06-22 76 views
11

我想在LINQ中創建一個交叉應用到用戶定義的表值函數的查詢。該SQL將是非常非常簡單,如下:LINQ to SQL交叉應用

SELECT * 
FROM MyTable mt 
CROSS APPLY MyTVF(mt.id) 

This後給出了包含兩個交叉應用LINQ查詢導致生成的SQL和外部的例子適用,但只針對一個子查詢不爲TVF。 This文章確認LINQ to SQL將爲「關係導航」生成交叉應用和外部應用運算符,但我不確定這種情況下的含義。 This後幾乎描述了我想要做的事情,答案表明要做到這一點的唯一方法是將SQL查詢包裝在存儲過程中,然後通過LINQ調用sp。我希望這不是真的,因爲我實際上需要一個tvf,可以在整個應用程序中以這種方式使用多個LINQ查詢,因此「將其包裝在sp中」對我而言不起作用。有誰知道通過LINQ獲得類似上面簡單的SQL語句的方法嗎?

+0

保記住,linq和SQL之間的關係不是完全的,所以並不是所有的SQL命令都可以通過linq來解釋。 – nothrow 2010-06-22 08:45:15

回答

15

這樣如何:

from mt in db.MyTable 
from mf in db.MyTVF (mt.id) 
select new { mt.Blah, mf.Blah } 
+0

是的,完全有效,我不能相信我甚至沒有嘗試過。很好,謝謝。 – 2010-06-22 08:59:13

0
var query = ActivityRepository.Where(p => p.iAction > -1 && userIds.Contains(p.iSellerId)).GroupBy(c => c.iSellerId).Select(c => c.OrderByDescending(cc => cc.dBeginTime).First()).Select(a => new ActivityInfo 
     { 
      ActivityId = a.iActivityId, 
      StartTime = a.dBeginTime, 
      SellerId = a.iSellerId, 
      EndTime = a.dEndTime, 
      ActivityName = a.sName, 
     }); 

所述關鍵點是:。選擇(C => c.OrderByDescending(CC => cc.dBeginTime)。首先())

+1

這段代碼可以生成OUTER APPLY語法 – adu 2014-01-13 06:18:41

+0

有趣的知道。這幾天我幾乎已經轉向EF了,幾年來還沒有使用過LinqToSQL。 – 2014-02-06 11:43:49