簡體   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