繁体   English   中英

c#:如何使用ac#方法中的参数调用泛型方法?

[英]c# : How to call generic method with paramerters with in a c# method?

我将从sqlserver存储的proc调用中获取的近似数据表结构。 我正在使用.netframework 3.5,我想使用ado.net将此数据表转换为json输出。 我一直停留在GetCountryList(FK,TypeName) 请帮助我实现以下json输出。 感谢您的帮助。

Type        ID   Name          FK

Continent    1  America         0
Continent    2  Asia            0  
Continent    3  Africa          0
Country      11 USA             1
Country      12 China           2
Country      13 India           2
Country      14 Kenya           3 

数据实体

public class UserData
{
  public string Type { get; set; }
  public string ID  { get; set; }
  public string Name { get; set; }
  public string FK {get; set;}
}

服务方式

 public static UserData GetUserData() {

   JavaScriptSerializer jSerializer = new JavaScriptSerializer ();

    DataTable dtUserData = DataAccess.getUserDataTable();

   if(dtUserData !=null && dtUserData.Rows.Count>0)
   {
      List<DataRow> list = dtMasterData.AsEnumerable().ToList();

      List<UserData> lstContinent = new List<UserData>();
      List<UserData> lstCountry = new List<UserData>();

        foreach(DataRow dr in list)
          {
              var objUserData = new UserData();
              objUserData.ID = dr["ID"].ToString();
              objUserData.Type = dr["Type"].ToString();
              objUserData.Name = dr["Name"].ToString();
              objUserData.FK = dr["FK"].ToString();  

              if(objUserData.Type.ToString().ToLower=="continent")
               {
                  lstContinent.Add(objUserData);
               }

              if(objUserData.Type.ToString().ToLower=="country")
               {
                  if(dr["FK"] !=null)
                  {
                    var ForgnKey = dr["FK"].ToString();
                    var TypeName = dr["Type"].ToString();
                    var CountriesList = GetCountryList(FK,TypeName)  //how do i call a generic method to filter out the country list as per passing Continent FK?
                    lstCountry.AddRange(CountriesList);

                 }

                    lstCountry.Add(objUserData);
               }

    private static List<T>  GetCountryList (lstCountry,ForgnKey,TypeName) //Not sure with the syntax
    {
          var CountriesList = lstCountry.Where(p=>p.FK==ForgnKey).ToList();

    }

  }
            return jSerializer.Serialize(objUserData);

}

预期的JSON输出:

"data": {
    "Contnient":
        [
            { "Id": "1", "Type": "Contient", "Name" :"America","FK":"1" },
            { "Id": "2", "Type": "Contient", "Name" :"Asia",   "FK":"2" },
            { "Id": "3", "Type": "Contient", "Name" :"Africa",   "FK":"2" },
            { "Id": "4", "Type": "Contient", "Name" :"Asia",   "FK":"2" }
        ],

    "America":
        {
            "Country":
            [
              { "Id": "11", "Type": "Country","Name":"India","FK":"1" }

            ]
        },
    "Asia:
      {
        "Country":
               [ { "Id": "12", "Type": "Country","Name":"China","FK":"2" },
                 { "Id": "13", "Type": "Country","Name":"India","FK":"2" }
               ]
       }
     "Africa":
       {
        "Country":
               [ { "Id": "14", "Type": "Country","Name":"Kenya","FK":"3" }
               ]

  }

泛型函数不应定义为:

private static List<T> GetCountryList<T>(lstCountry,ForgnKey,TypeName)
{
      return lstCountry.Where(p=>p.FK==ForgnKey).ToList();
}

然后称为:

var CountriesList = GetCountryList<UserData>(lstCountry,FK,TypeName);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM