2009-08-06 3 views
1

하나의 데이터베이스 테이블/엔티티 객체 (NodePath)만을 다루고 있습니다. LINQ/Entity Framework에서이 T-SQL 쿼리를 어떻게 사용할 수 있습니까?

특정 노드를 감안할 때,이 쿼리에 따라 모든 NodePaths의 일부만을 얻으려면 :
select 
    * 
from 
    NodePath 
where 
    NodeId = @GivenNodeId and 
    Id in 
    (
     --active paths 
     select 
      a.Id 
     from 
      NodePath a join 
     (
       select 
        [Path], 
        max(Created) as Created 
       from 
        NodePath 
       group by 
        [Path] 
     ) b on 
     a.[Path] = b.[Path] and 
     a.Created = b.Created 
    ) 

가 어떻게 내 VB.NET 응용 프로그램에서이 작업을 수행 할 수

?

Dim AllPaths = GivenNode.NodePaths.OrderByDescending(Function(p) p.Created) 

Dim ActivePaths = ??? 

답변

2

저장 프로 시저를 만든 다음 호출 할 EDMX (모델)에 추가 할 수 있습니다. 마우스 오른쪽 버튼을 클릭하고 "데이터베이스에서 모델 업데이트"를 선택하면 저장 프로 시저 탭이 있어야합니다. here도 참조하십시오.

모델 브라우저에서 저장 프로 시저를 찾습니다.

마우스 오른쪽 버튼으로 클릭하고 함수 가져 오기 만들기를 선택하십시오.

Entity Data Model Create Function Import http://img31.imageshack.us/img31/9100/createfunctionimport.gif

는 반환되는 개체의 유형을 선택합니다. (이 경우 : NodePath)

전화 코드 내에서 기능 :

Dim ActivePaths = context.ActivePaths(GivenNode.Id) 

당신이 저장 프로 시저없이이 작업을 수행하고자한다면, 당신은 LINQ이나 단체 SQL을 사용해야 할 것입니다. 또는 물론 ADO.NET :

+0

나는 더 많은 단계를이 답변을 업데이 트했습니다. 고마워, 마르셀. –

3

나는이 SQL을 올바르게 번역했다고 믿지만, 필요한 경우 변경할 수 있습니다. NodeId과 일치하는 한 각 공통 Path (최대 값 Created 기준)에 대해 NodePath 중 하나를 선택합니다.

C#을 해결 :

var nodePaths = (from p in context.NodePaths 
       group p by p.Path into g 
       select g.OrderByDescending(i => i.Created).First() 
       ).Where(p => p.NodeId == givenNodeId); 

VB.NET 솔루션 (나는, 나의 기본 언어를 생각한다) :

Dim nodePaths = (From p In context.NodePaths _ 
       Group p By p.Path Into Group _ 
       Select Group.OrderByDescending(Function(i) i.Created).First() _ 
       ).Where(Function(p) p.NodeId = givenNodeId) 
+0

이것은 NodePath를 가장 큰 Created로 먼저 잡은 다음 필터로 잡아서 다소 이상합니다. 이것은 SQL 쿼리가 작동하는 것처럼 보입니다. 그래서 나는 이렇게 작성했습니다. –

+0

또한, LinqToSql을 염두에두고 작성했지만 Entity Framework에서 문제가되는 것을 보지 못했습니다. –

+0

고마워, 라이언. 마르셀의 스토어드 프로 시저 제안을 위해 지금 결정했습니다. 결국 나는 LINQ에 훨씬 더 편안 해져야한다고 압니다. –

관련 문제