2010-06-22 78 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