11

我想在 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 语句的方法?

4

2 回答 2

15

这个怎么样:

from mt in db.MyTable
from mf in db.MyTVF (mt.id)
select new { mt.Blah, mf.Blah }
于 2010-06-22T08:44:35.983 回答
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,
        });

关键点是:.Select(c => c.OrderByDescending(cc => cc.dBeginTime).First())

于 2014-01-13T06:17:05.407 回答