为特定的SubsIdy获取具有相同AdminId的电子邮件ID

时间:2014-10-06 11:41:33

标签: c# sql sql-server

我在Sql server&中有一个如下表格。我需要为特定的SubsId使用相同的AdminId获取EmailId,有人可以建议我一些更好的方法吗?      

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

我需要为特定的SubsId(比如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.

执行此查询在int列表中获取返回的admin ID,然后遍历列表中的所有admin ID。假设AdminIds位于列表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 
    });
 }

1 个答案:

答案 0 :(得分:0)

我认为您可以通过使用SQL Server更轻松地获得此答案。 (这是它要做的事情。)尝试替换你的查询:

SELECT distinct(ADMINID) FROM MAPPING WHERE SUBSID = 1

用这个:

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

(理想情况下,您应该避免使用&#34;选择*&#34;并实际明确地列出您的列。这是一种很好的做法,有助于避免在表结构发生变化时出错。)更改查询应该会给你结果,而无需在C#应用程序中对数据进行任何后处理。