2010-06-22 1 views
11

LINQ의 사용자 정의 테이블 값 함수에 교차 적용을 사용하여 쿼리를 만들고 싶습니다.LINQ to SQL 교차 적용

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

This 포스트에 대한뿐만 아니라 서브 쿼리 만 적용 크로스 모두 적용이 포함되어 생성 된 SQL 결과 LINQ 쿼리 및 외부의 예를 제공합니다 다음 SQL은 아래와 같이 정말 오히려 간단 할 것 tvf. This 문서에서는 LINQ to SQL이 "관계 탐색"에 대해 교차 적용 및 외부 적용 연산자를 생성하지만이 컨텍스트에서 의미하는 것이 확실하지 않은지 확인합니다. This 게시물 꽤 많이 설명하고 답변을 저장 프로 시저에서 SQL 쿼리를 래핑하고 LINQ 통해 sp 호출 할 수있는 유일한 방법은 말합니다. 사실, 여러 LINQ 쿼리에서이 방식으로 사용할 수있는 tvf가 필요하기 때문에 이것이 사실이 아니기를 바랍니다. 그래서 "sp에서 랩핑"하면 나에게 적합하지 않을 것입니다. 누구든지 위의 간단한 SQL 문을 LINQ를 통해 얻을 수있는 방법을 알고 있습니까?

+0

킵 염두에두고, 린크와 SQL 사이의 관계는 사상적이지 않으므로 모든 SQL 명령이 linq을 통해 해석 될 수있는 것은 아닙니다. – nothrow

답변

15

이 방법에 대해 :

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

그래, 그게 완전히 작동, 내가 그걸 시도조차도 안 믿을 수 없어. 좋은 한 감사. –

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, 
     }); 

키포인트는 다음과 같습니다 ALL 기타 사항 서보 -OFF (C => c.OrderByDescending (CC => cc.dBeginTime) 좁은 방())

+1

이 코드는 OUTER APPLY 구문을 생성 할 수 있습니다. – adu

+0

알아두면 재미 있습니다. 요즘 EF로 옮겨 왔지만 LinqToSQL을 2 년 동안 사용하지 않았습니다. –