Dot-Net

LINQ to SQL 交叉應用

  • February 18, 2014

我想在 LINQ 中創建一個交叉應用到使用者定義的表值函式的查詢。SQL 將非常簡單,如下所示:

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

這篇文章給出了一個 LINQ 查詢的範例,該查詢導致生成的 sql 包含交叉應用和外部應用,但僅適用於子查詢,而不適用於 tvf。 本文確認 LINQ to SQL 將為“關係導航”生成交叉應用和外部應用運算符,但我不確定在這種情況下這意味著什麼。 文章幾乎描述了我想做的事情,答案說這樣做的唯一方法是將 SQL 查詢包裝在儲存過程中,然後通過 LINQ 呼叫 sp。我希望這不是真的,因為我實際上需要一個可以在多個 LINQ 查詢中的整個應用程序中以這種方式使用的 tvf,因此“將其包裝在 sp 中”對我不起作用。有誰知道通過 LINQ 獲得類似上述簡單 SQL 語句的方法?

這個怎麼樣:

from mt in db.MyTable
from mf in db.MyTVF (mt.id)
select new { mt.Blah, mf.Blah }
   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,
       });

關鍵點是:.Select(c => c.OrderByDescending(cc => cc.dBeginTime).First())

引用自:https://stackoverflow.com/questions/3091514