How can I make a single generic method from the 2 methods ConvertToDictionary
that can handle both collections?
EDIT: I rewrote the code, so it can be run as it is.
DgDictHosp
differs from DgDictOper
in type of property Data
IOrderedEnumerable<Hospitalization>
vs IOrderedEnumerable<Operation>
where Hospitalization and Operation are classes generated by Entity Framework.
using System;
using System.Collections.Generic;
using System.Linq;
public class DictItem
{
public long Id { get; set; }
public List<string> List { get; set; }
}
public class Hospitalization
{
public int ID { get; set; }
public long IDHospitalization { get; set; }
public int IDDiagnosis { get; set; }
}
public class Operation
{
public int ID { get; set; }
public long IDOperation { get; set; }
public int IDDiagnosis { get; set; }
}
public class DgDictOper
{
public long Key { get; set; }
public IOrderedEnumerable<Operation> Data { get; set; }
public List<string> List { get; set; }
}
public class DgDictHosp
{
public long Key { get; set; }
public IOrderedEnumerable<Hospitalization> Data { get; set; }
public List<string> List { get; set; }
}
public class Program
{
public static string ToLiteral(int dgid)
{
return "dictionary phrase for " + dgid;
}
public static Dictionary<long, DictItem> ConvertToDictionary(List<DgDictHosp> list_g)
{
var res_dict = list_g.Select(q => new DictItem
{
Id = q.Key,
List = q.Data.Select(t => ToLiteral(t.IDDiagnosis)).ToList()
}).ToDictionary(k => k.Id);
return res_dict;
}
public static Dictionary<long, DictItem> ConvertToDictionary(List<DgDictOper> list_g)
{
var res_dict = list_g.Select(q => new DictItem
{
Id = q.Key,
List = q.Data.Select(t => ToLiteral(t.IDDiagnosis)).ToList()
}).ToDictionary(k => k.Id);
return res_dict;
}
public static List<Hospitalization> InitHospList()
{
List<Hospitalization> list = new List<Hospitalization>();
list.Add(new Hospitalization() { ID = 1, IDHospitalization = 11, IDDiagnosis = 10 });
list.Add(new Hospitalization() { ID = 2, IDHospitalization = 11, IDDiagnosis = 20 });
return list;
}
public static List<Operation> InitOperList()
{
List<Operation> list = new List<Operation>();
list.Add(new Operation() { ID = 1, IDOperation = 22, IDDiagnosis = 30 });
list.Add(new Operation() { ID = 2, IDOperation = 22, IDDiagnosis = 40 });
return list;
}
public static Dictionary<long, DictItem> GetHospDict(List<Hospitalization> list)
{
var res_g =
(from dg in list
group dg by dg.IDHospitalization
into dg_group
select new DgDictHosp
{
Key = dg_group.Key,
Data = dg_group.OrderBy(g => g.ID)
}).ToList();
var res = ConvertToDictionary(res_g);
return res;
}
public static Dictionary<long, DictItem> GetOperDict(List<Operation> list)
{
var res_g =
(from dg in list
group dg by dg.IDOperation
into dg_group
select new DgDictOper
{
Key = dg_group.Key,
Data = dg_group.OrderBy(g => g.ID)
}).ToList();
var res = ConvertToDictionary(res_g);
return res;
}
public void Main()
{
foreach (var x in GetHospDict(InitHospList()))
{
Console.WriteLine("Hosp ID: " + x.Key);
foreach (var y in x.Value.List)
{
Console.WriteLine("Diagosis: " + y); ;
}
}
foreach (var x in GetOperDict(InitOperList()))
{
Console.WriteLine("Operation ID: " + x.Key);
foreach (var y in x.Value.List)
{
Console.WriteLine("Diagosis: " + y); ;
}
}
}
}