C# 对象建模 1:n:m.. realtionships.



如何创建一个具有具有多个相关属性的属性的对象,这些属性具有多个相关属性等等?

我正在创建一个 C# 类,该类将描述各种老虎殖民地的脚趾疾病。

一个殖民地有很多老虎。 1只老虎有4只爪子。 1只爪子有5个脚趾。每个脚趾都被"感染"或"未感染"。

如何构造一个对象来检索殖民地 4 的老虎的患病状态,名为 Eddy 的右前爪的第二个脚趾? 例如

Tiger t = new Tiger;
string toeStatus = t.colony(4).tiger("Eddy").paw("front-right").toe(2)

我只需要创建具有自身属性的对象,而不是具有与属性相关的属性相关的属性。

我还想重用这个对象来获取给定殖民地所有老虎的所有名称......

string allTigersNames = t.colony(4).tiger(*)
//Eddy, Glennis, Barry, Toby, Punter

我在类似的帖子中问过,并得到了以我目前的经验水平不理解的回答。特别是使用强类型属性的方法。

public class Colony
{
public int ColonyId {get; set;}
public string ColonyName {get; set;}
public List<Tiger> Tigers {get; set;}
}
public class Tiger
{
public int TigerId {get; set;}
public string TigerName {get; set;}
public Colony Colony {get; set;}
public List<Paw> Paws {get; set;}
}
public class Paw
{
public int PawId {get; set;}
public string PawDescription {get; set;}
public Tiger Tiger {get; set;}
public List<Toe> Toes {get; set;}
}
public class Toe
{
public int ToeId {get; set;}
public Paw Paw {get; set;}
public int ToeFinger {get; set;}
}

如果你问我,这将是我的层次结构

Colony > Multiple Tigers
Tiger > Multiple Paws
Paw > Multiple Toes

然后添加将如下所示


var primaryColony = new Colony
{
ColonyId = 1,
ColonyName = "First Colony",
Tigers = new List<Tigers>();
};
var colonies = new List<Colonies>();

//adding primary colony
colonies.Add(primaryColony);
//adding tiger to primary colony via name or you could use ColonyId == 1
colonies.First(c => c.ColonyName == "First Colony")
.Tigers.Add(new Tiger
{
TigerId = 1,
TigerName = "Eddy",
Paws = new List<Paw>();,
Colony = primaryColony
});
//adding paws to tiger named eddy in colony named primary colony
colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.Add(new Paw
{
PawId = 1,
PawDescription = "right-front",
Toes = new List<Toes>();,
Tiger = colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
});
//adding toes to right front paw of tiger named eddy in colony named first colony
colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.First(q => q.PawDescription == "right-front")
.First().Toes.Add(new Toe
{
ToeId = 1,
ToeFinger = 1,
Paw = colonies.First(e => e.ColonyName == "First Colony")
.Tigers.First(r => r.TigerName == "Eddy")
.Paws.First(q => q.PawDescription == "right-front")
});

或者如果你有一个过滤器,比如你想把爪子添加到老虎名字=涡流

var tigerEddy = colonies.Select(y => new Tiger
{
TigerId = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.TigerId),
TigerName = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.TigerName),
Colony = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.Colony)
Paws = y.Tigers.FirstOrDefault?.(c => c.TigerName == "Eddy").Select(e => e.Paws)
}.Any(x => x.Tigers.Containes("Eddy").FirstOrDefault();
tigerEddy.Paws.Add(new Paws.....);

然后将其传回殖民地,并以TigerId为参考

最新更新