LINQ to SQL交叉应用

时间:2010-06-22 08:39:01

标签: .net linq linq-to-sql cross-apply

我想在LINQ中创建一个带有交叉应用的查询到用户定义的表值函数。 SQL将非常简单,如下所示:

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

This post给出了LINQ查询的示例,该查询导致生成的sql包含交叉应用和外部应用,但仅用于不用于tvf的子查询。 This文章确认LINQ to SQL将为“关系导航”生成交叉应用和外部应用运算符,但我不确定这意味着什么。 This帖子几乎描述了我想要做的事情,答案说这样做的唯一方法是将SQL查询包装在存储过程中,然后通过LINQ调用sp。我希望这不是真的,因为我实际上需要一个可以在多个LINQ查询中的应用程序中使用这种方式的tvf,因此“将它包装在sp中”对我来说不起作用。有没有人知道通过LINQ得到类似上面的简单SQL语句的方法?

2 个答案:

答案 0 :(得分:15)

这个怎么样:

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

答案 1 :(得分: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).First())