2012-10-12 3 views
1

복잡한 쿼리를 기반으로 레코드 집합 (결과 집합 A)을 반환하는 저장 프로 시저가 있고 레코드가 특정 시퀀스에 있습니다. 다른 테이블 (결과 B)에서 ID 값을 반환하는 다른 쿼리가 있습니다.저장 프로 시저 레코드 집합에서 레코드 제거

"결과 집합 B에서 레코드를 가져옵니다 (결과 집합 B)"와 같은 작업을 수행하려고합니다.

코드 비하인드에서이 작업을 수행해야합니다. 이 아이디어를 어떻게 할 것인가? 두 레코드의 reader1 및 reader2, 확장 선택 방법 항목을 IEnumerable의 목록을 얻을 수 있습니다 금리 기준 및 Linq Contains operator

public static IEnumerable<string> Select(this DataReader reader, int index) 
{ 
    while (reader.Read()) 
    { 
     yield return reader[index].ToString(); 
    } 
} 

의 Nota -

+1

귀하의 용어는 매우 구체적 일 수 있습니까? "레코드 집합"은 (레거시 ADO를 사용하지 않는 한) 모호합니다. 현재 귀하의 데이터는 어떻게 저장되고 있습니까? 두 개의 'DataTable'인스턴스에 있습니까? 두 개의'List '(아마도'T '가 다른 경우)에? 또는...? –

+0

이러한 종류의 필터링은 복잡한 쿼리를 작성하여 TSQL에서 수행 할 수 있습니다. 복잡한 쿼리를 사용하는 것이 효율적이지 않은 경우 일부 전문가가 대안을 찾기 위해 쿼리를 수정하도록 쿼리를 공유하는 것이 가장 좋습니다. 나중에 단계가 아닌 초기 단계에서 수정하십시오. – Munawar

답변

1

당신은이 확장 방법을 사용할 수 있습니다.

var list1 = reader1.Select(0); //Search on first column; 
var list2 = reader2.Select(0); 
//Get list items of values (index 0) of list2, who exist in list1. 
var result = from item on list2.Select(0) 
      where list1.Contains(item) 
      select item; 
관련 문제