Ответ 1
Как насчет этого:
from mt in db.MyTable
from mf in db.MyTVF (mt.id)
select new { mt.Blah, mf.Blah }
Я хотел бы создать запрос с перекрестным применением в пользовательскую функцию значения таблицы в LINQ. SQL был бы довольно простым, как показано ниже:
SELECT *
FROM MyTable mt
CROSS APPLY MyTVF(mt.id)
В этом сообщении приведен пример запроса LINQ, в результате которого создается сгенерированный sql, который содержит как крест-заявку, так и внешний, но только для вспомогательного запроса, но не для ТВФ. Эта статья подтверждает, что LINQ to SQL будет генерировать cross apply и внешние применяемые операторы для "навигации по отношениям", но я не уверен, что это означает в этом контекст. В этом сообщении описывается практически то, что я хочу сделать, и ответ говорит, что единственный способ сделать это - обернуть SQL-запрос в хранимую процедуру, а затем вызвать sp через LINQ. Я надеюсь, что это не так, потому что мне действительно нужен tvf, который можно использовать таким образом во всем приложении в нескольких запросах LINQ, поэтому "обернуть его в sp" не будет работать для меня. Кто-нибудь знает способ получить что-то вроде простого оператора SQL выше через LINQ?
Как насчет этого:
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,
});
ключевая точка: .Выберите (c = > c.OrderByDescending(cc = > cc.dBeginTime).First())