2014-10-06 2 views
0

SQL 서버에 다음과 같은 테이블이 있습니다 & 특정 서브 디렉토리에 대해 동일한 AdminId로 EmailIds를 가져와야합니다. 특정 서브 ID에 대해 동일한 AdminId를 가진 Ids 가져 오기

MAPPING table 
    SubsId AdminId EmailId 
     1   1   1 
     1   1   2 
     1   2   3 
     1   2   2 
     2   2   2

특정 하위 ID (예 : 1)에 대해 동일한 AdminId로 EmailIds를 가져와야합니다. 나는이 길을 가고있다, 더 좋은 길은 있니?

public class Mapping 
{ 
    public int SubsId {get; set;} 
    public int AdminId {get; set;} 
    public List<int> LstEmailId {get; set;} 
} 

SELECT distinct(ADMINID) FROM MAPPING WHERE SUBSID = 1. 

반환되는 관리자 ID를 int 목록에서 가져온 다음 목록의 모든 관리 ID를 반복합니다. AdminId가 List LstAdminIds에 있다고 가정 해 봅시다.

var ObjLstMapping = new List<Mapping>(); 
foreach(AdminId in LstAdminIds) 
{ 
    var LstEmailIds = List<int>(); 
    SELECT EMAILID FROM MAPPING WHERE SUBSID=1 AND ADMINID = AdminId 
    // execute this query which will return a set of rows. Loop through each row & add to the list LstEmailIds 
    while(ObjSqldataReader.Read()) 
    { 
     LstEmailIds.Add(Convert.Tont32(ObjSqldataReader["EMAILID"])) 
    } 
    ObjLstMapping. Add(new Mapping 
    { 
     SubsId = 1, 
     AdminId = AdminId, 
     LstEmailId = LstEmailIds 
    }); 
} 

답변

0

SQL Server를 사용하면이 대답을보다 쉽게 ​​얻을 수 있습니다. (이것은이 어떻게 만들어진 물건의 종류입니다.) 쿼리 교체하십시오 :이와

SELECT distinct(ADMINID) FROM MAPPING WHERE SUBSID = 1 

을 :

SELECT * FROM MAPPING WHERE SUBSID = 1 AND EmailId = AdminId 

를 (이상적으로, 당신은 실제로 목록 "* 선택"사용하지 않도록해야합니다 테이블 구조가 변경되면 오류를 방지하는 데 도움이됩니다. 쿼리를 변경하면 C# 응용 프로그램에서 데이터를 후 처리하지 않고도 결과를 얻을 수 있습니다.

관련 문제