使用LINQ可以实现这一点吗?我有一个从数据库填充的类。有孩子和他父母的信息。儿童姓名,姓氏,班级信息,联系方式。父母姓名,姓氏,联系人。孩子可能有多个父母。
public class KontaktiniaiDuomenysPartialViewModel
{
/// <summary>
/// Child ID
/// </summary>
public long AsmenysId { get; set; }
/// <summary>
/// Child name
/// </summary>
public string Vardas { get; set; }
/// <summary>
/// Child surname
/// </summary>
public string Pavarde { get; set; }
/// <summary>
/// Child class ID
/// </summary>
public long KlasesId { get; set; }
/// <summary>
/// Child class name
/// </summary>
public string KlasesPavadinimas { get; set; }
/// <summary>
/// Child phone
/// </summary>
public string Telefonas { get; set; }
/// <summary>
/// Child mobile phone
/// </summary>
public string MobilusTelefonas { get; set; }
/// <summary>
/// Child email
/// </summary>
public string El_pastas { get; set; }
/// <summary>
/// Child Address
/// </summary>
public string Adresas { get; set; }
/// <summary>
/// Child father's/mother's id
/// </summary>
public long TevoAsmenysId { get; set; }
/// <summary>
/// Child father's/mother's address
/// </summary>
public string TevoAdresas { get; set; }
/// <summary>
/// Child father's/mother's name
/// </summary>
public string TevoVardas { get; set; }
/// <summary>
/// Child father's/mother's surname
/// </summary>
public string TevoPavarde { get; set; }
/// <summary>
/// Child father's/mother's email
/// </summary>
public string TevoElPastas { get; set; }
/// <summary>
/// Child father's/mother's phone
/// </summary>
public string TevoTelefonas { get; set; }
/// <summary>
/// Child father's/mother's phone
/// </summary>
public string TevoMobilusTelefonas { get; set; }
}
填写此课程的示例:
List<KontaktiniaiDuomenysPartialViewModel> data = new List<KontaktiniaiDuomenysPartialViewModel>();
KontaktiniaiDuomenysPartialViewModel data1 = new KontaktiniaiDuomenysPartialViewModel();
data1.AsmenysId = 1;
data1.Vardas = "Petras";
data1.Pavarde = "Petraitis";
data1.KlasesId = 2;
data1.KlasesPavadinimas = "k1";
data1.Telefonas = "860000000";
data1.MobilusTelefonas = "870000000";
data1.El_pastas = "asd@asd.lt";
data1.Adresas = "balt23";
// Petras mother info
data1.TevoAsmenysId = 3;
data1.TevoVardas = "Dalia";
data1.TevoPavarde = "zuk";
data1.TevoElPastas = "vejo@gmail.com";
data1.TevoTelefonas = "861111111";
data1.TevoMobilusTelefonas = "862222222";
data1.TevoAdresas = "Kaunas";
KontaktiniaiDuomenysPartialViewModel data2 = new KontaktiniaiDuomenysPartialViewModel();
data2.AsmenysId = 1;
data2.Vardas = "Petras";
data2.Pavarde = "Petraitis";
data2.KlasesId = 2;
data2.KlasesPavadinimas = "k1";
data2.Telefonas = "860000000";
data2.MobilusTelefonas = "870000000";
data2.El_pastas = "asd@asd.lt";
data2.Adresas = "balt23";
// Petras father info
data2.TevoAsmenysId = 4;
data2.TevoVardas = "juoz";
data2.TevoPavarde = "luk";
data2.TevoElPastas = "juoz@gmail.com";
data2.TevoTelefonas = "863333333";
data2.TevoMobilusTelefonas = "864444444";
data2.TevoAdresas = "Vilnius";
KontaktiniaiDuomenysPartialViewModel data3 = new KontaktiniaiDuomenysPartialViewModel();
data3.AsmenysId = 2;
data3.Vardas = "Eivis";
data3.Pavarde = "Konc";
data3.KlasesId = 5;
data3.KlasesPavadinimas = "k5";
data3.MobilusTelefonas = "880000000";
data3.Telefonas = "865555555";
data3.El_pastas = "Eivis@asd.lt";
data3.Adresas = "balt28";
// Eivis father info
data3.TevoAsmenysId = 5;
data3.TevoVardas = "obb";
data3.TevoPavarde = "tre";
data3.TevoElPastas = "obb@gmail.com";
data3.TevoTelefonas = "866666666";
data3.TevoMobilusTelefonas = "867777777";
data3.TevoAdresas = "KLP";
data.Add(data1);
data.Add(data2);
data.Add(data3);
我想将数据分组到这个类中:
public class KontaktiniaiDuomenysPartialViewModelGrouped
{
/// <summary>
/// Child id
/// </summary>
public long AsmenysId { get; set; }
/// <summary>
/// Child name
/// </summary>
public string Vardas { get; set; }
/// <summary>
/// Child surname
/// </summary>
public string Pavarde { get; set; }
/// <summary>
/// Child class
/// </summary>
public KlaseModels Klase { get; set; }
/// <summary>
/// Child father's/mother's info
/// </summary>
public IList<TevoKontaktai> Tevaii { get; set; }
/// <summary>
/// Child contacts
/// </summary>
public KontaktiniaiDuomenysModel Kontaktai { get; set; }
}
额外课程:
public class KlaseModels
{
/// <summary>
/// child class id
/// </summary>
public long Id { set; get; }
/// <summary>
/// Child class name
/// </summary>
public string Pavadinimas { set; get; }
}
public class TevoKontaktai
{
/// <summary>
/// Child father's/mother's id
/// </summary>
public long AsmenysId { get; set; }
/// <summary>
/// Child father's/mother's name
/// </summary>
public string Vardas { get; set; }
/// <summary>
/// Child father's/mother's surname
/// </summary>
public string Pavarde { get; set; }
/// <summary>
/// Child father's/mother's contacts
/// </summary>
public KontaktiniaiDuomenysModel Kontaktai { get; set; }
}
public class KontaktiniaiDuomenysModel
{
/// <summary>
/// Child father's/mother's email
/// </summary>
public string ElPastas { get; set; }
/// <summary>
/// Child father's/mother's phone
/// </summary>
public string Telefonas { get; set; }
/// <summary>
/// Child father's/mother's mobile phone
/// </summary>
public string MobilusTelefonas { get; set; }
/// <summary>
/// Child father's/mother's address
/// </summary>
public string Adresas { get; set; }
}
预期结果:
IList<KontaktiniaiDuomenysPartialViewModelGrouped> afterLinq
afterLinq[0]
afterLinq[0].AsmenysId = 1
afterLinq[0].Vardas = "Petras"
afterLinq[0].Pavarde = "Petraitis"
afterLinq[0].Klase.Id = 2
afterLinq[0].Klase.Pavadinimas = "k1"
afterLinq[0].Kontaktai.ElPastas = "asd@asd.lt"
afterLinq[0].Kontaktai.Telefonas = "860000000"
afterLinq[0].Kontaktai.MobilusTelefonas = "870000000"
afterLinq[0].Kontaktai.Adresas = "balt23"
afterLinq[0].Tevaii[0].AsmenysId = 3
afterLinq[0].Tevaii[0].Vardas = "Dalia"
afterLinq[0].Tevaii[0].Pavarde = "zuk"
afterLinq[0].Tevaii[0].Kontaktai.ElPastas = "vejo@gmail.com"
afterLinq[0].Tevaii[0].Kontaktai.Telefonas = "861111111"
afterLinq[0].Tevaii[0].Kontaktai.MobilusTelefonas = "862222222"
afterLinq[0].Tevaii[0].Kontaktai.Adresas = "Kaunas";
afterLinq[0].Tevaii[1].AsmenysId = 4
afterLinq[0].Tevaii[1].Vardas = "juoz"
afterLinq[0].Tevaii[1].Pavarde = "luk"
afterLinq[0].Tevaii[1].Kontaktai.ElPastas = "juoz@gmail.com"
afterLinq[0].Tevaii[1].Kontaktai.Telefonas = "863333333"
afterLinq[0].Tevaii[1].Kontaktai.MobilusTelefonas = "864444444"
afterLinq[0].Tevaii[1].Kontaktai.Adresas = "Vilnius";
afterLinq[1]
afterLinq[1].AsmenysId = 2
afterLinq[1].Vardas = "Eivis"
afterLinq[1].Pavarde = "Konc"
afterLinq[1].Klase.Id = 5
afterLinq[1].Klase.Pavadinimas = "k5"
afterLinq[1].Kontaktai.ElPastas = "Eivis@asd.lt"
afterLinq[1].Kontaktai.Telefonas = "865555555"
afterLinq[1].Kontaktai.MobilusTelefonas = "880000000"
afterLinq[1].Kontaktai.Adresas = "balt28"
afterLinq[1].Tevaii[0].AsmenysId = 5
afterLinq[1].Tevaii[0].Vardas = "obb"
afterLinq[1].Tevaii[0].Pavarde = "tre"
afterLinq[1].Tevaii[0].Kontaktai.ElPastas = "obb@gmail.com"
afterLinq[1].Tevaii[0].Kontaktai.Telefonas = "866666666"
afterLinq[1].Tevaii[0].Kontaktai.MobilusTelefonas = "867777777"
afterLinq[1].Tevaii[0].Kontaktai.Adresas = "KLP";
答案 0 :(得分:1)
var grouped = new[] { data1, data2, data3 }
.GroupBy(kd => new
{
kd.AsmenysId,
kd.Vardas,
kd.Pavarde,
kd.KlasesId,
kd.KlasesPavadinimas,
kd.El_pastas,
kd.Telefonas,
kd.MobilusTelefonas,
kd.Adresas
})
.Select(g => new KontaktiniaiDuomenysPartialViewModelGrouped
{
AsmenysId = g.Key.AsmenysId,
Vardas = g.Key.Vardas,
Pavarde = g.Key.Pavarde,
Klase = new KlaseModels
{
Id = g.Key.KlasesId,
Pavadinimas = g.Key.KlasesPavadinimas
},
Kontaktai = new KontaktiniaiDuomenysModel
{
ElPastas = g.Key.El_pastas,
Telefonas = g.Key.Telefonas,
MobilusTelefonas = g.Key.MobilusTelefonas,
Adresas = g.Key.Adresas
},
Tevaii = g.Select(kd => new TevoKontaktai {
AsmenysId = kd.TevoAsmenysId,
Vardas = kd.TevoVardas,
Pavarde = kd.TevoPavarde,
Kontaktai = new KontaktiniaiDuomenysModel
{
ElPastas = kd.TevoElPastas,
Telefonas = kd.TevoTelefonas,
MobilusTelefonas = kd.TevoMobilusTelefonas,
Adresas = kd.TevoAdresas
}
}).ToList()
});
不过,我猜关系数据表可能是你的扁平模型的原因,但实际上你可以使用XML之类的技术加载分层模型,或者你可以尝试使用NoSQL DB。 :d