LINQ to SQL кросс применяются - PullRequest
11 голосов
/ 22 июня 2010

Я хотел бы создать запрос с перекрестным применением в определяемой пользователем функции табличных значений в LINQ. SQL будет довольно простым, как показано ниже:

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

В этом посте приведен пример запроса LINQ, в результате которого создается сгенерированный sql, содержащий как перекрестное, так и внешнее применение, но только для подзапроса, а не для tvf. Эта статья подтверждает, что LINQ to SQL будет генерировать операторы перекрестного и внешнего применения для «навигации по отношениям», но я не уверен, что это означает в этом контексте. Этот пост описывает в значительной степени то, что я хочу сделать, и в ответе говорится, что единственный способ сделать это - обернуть запрос SQL в хранимую процедуру и затем вызвать sp через LINQ. Я надеюсь, что это не так, потому что мне действительно нужен tvf, который можно использовать таким образом во всем приложении в нескольких запросах LINQ, поэтому «обернуть его в sp» не будет работать для меня. Кто-нибудь знает способ получить что-то вроде простого оператора SQL выше через LINQ?

Ответы [ 2 ]

15 голосов
/ 22 июня 2010

Как насчет этого:

from mt in db.MyTable
from mf in db.MyTVF (mt.id)
select new { mt.Blah, mf.Blah }
0 голосов
/ 13 января 2014
    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 ())

...