2012-07-24 2 views
1

다른 테이블에서 열 값을 조회하고 나중에 내 where 절에서 새 조회 값을 사용하려고합니다. 예를 들어, 내가 시작 ID가 최종 ID보다 큰 레코드의 목록을 쿼리 할 필요가, 위의 예에서Linq 한 테이블에서 다른 값을 할당하십시오.

ID Name 
1  Jan 
2  Feb 
3  March 

Product Customer Start End 
    A   C  Feb March 
    A   B  Jan March 
    B   C  March Jan 

아래에 다음과 같은 테이블이있다. 예를 들어, B-C-March-Jan은 제가 찾고있는 기록입니다. 가입을 사용해야합니까? 또한 가능한 경우 쿼리 구문이 매우 유용합니다.

내 쿼리 :

var vInvalidStartEnd = from p in vRecords 
         where (from t in vTimePeriods where t.Name == p["Start"] select t.TID).First().Cast<int>() > (from t in vTimePeriods where t.TName == p["End"] select t.ID).First().Cast<int>() 
         select new 
         { 
          Product = p["Product"], 
          Location = p["Location"], 
          Start = p["Start"], 
          End = p["End"] 
         }; 

감사

+1

시작과 끝 'DateTimes' 또는'Strings'입니까? 이 C#, Linq-To-SQL 또는 Linq-To-DataSet 또는 Linq-To-Entities 또는 ...입니까? 너 뭐 해봤 니? –

+0

안녕하세요, 시작 및 끝 문자열이며 Linq-To-Dataset입니다. 내 현재 쿼리로 내 게시물을 업데이 트합니다. 감사합니다 – user320587

+0

@ TimSchmelter 내 쿼리로 게시물을 업데이 트했습니다. – user320587

답변

1

가정 ID는 이름은 나중에 다른보다 정의합니다. Tim의 문제는 아마도 ID 대신 링크로 이름 값을 사용하는 것이 드문 일이기 때문입니다. 둘째, ID는 어느 달이 다른 달보다 큰지를 잘 나타내지 못하기 때문입니다. 만약 내가 의 달 이름을 사용했다면 아마 vTimePeriods 테이블에 id, name, order 값을 가질 것입니다.

from p in vRecords 
join start in vTimePeriods on p["Start"] equals start["Name"] 
join end in vTimePeriods on p["End"] equals end["Name"] 
where (int)end["ID"] < (int)start["ID"] 
select new 
{ 
    Product = p["Product"], 
    Location = p["Location"], 
    Start = p["Start"], 
    End = p["End"] 
}; 

Linq to Dataset의 구체적인 내용은 알지 못합니다.

+0

예 Bert. 나는 동의한다. ID를 사용해서는 안되며 우선 순위 등의 값을 사용했을 것입니다. – user320587

관련 문제