C# Linq与数组连接

C# Linq与数组连接,c#,linq,C#,Linq,我有三门课: public class Disciplina { public int Key { get; set; } public string Name { get; set; } public string[] Semestr { get; set; } public int Time { get; set; } public List<int> TimeToAll { get; set; } public string Ot

我有三门课:

public class Disciplina
{
    public int Key { get; set; }
    public string Name { get; set; }
    public string[] Semestr { get; set; }
    public int Time { get; set; }
    public List<int> TimeToAll { get; set; }
    public string Otchetnost { get; set; }
    public int Specialnost { get; set; }
    ...
}

public class Cafedra
{
    public int Key { get; set; }
    public string Name { get; set; }
    public string Facultet { get; set; }
    public string Telefone { get; set; }
    public List<int> Specializations { get; set; }
    ...
}

public class Specialization
{
    public int Key { get; set; }
    public string Name { get; set; }
    public string SpecialName { get; set; }
    public string FormaObuch { get; set; }
    public string[] DisplinsID { get; set; }
    ...
}
公共类纪律
{
公共int密钥{get;set;}
公共字符串名称{get;set;}
公共字符串[]Semestr{get;set;}
公共整数时间{get;set;}
公共列表TimeToAll{get;set;}
公共字符串Otchetnost{get;set;}
公共int Specialnost{get;set;}
...
}
公共类咖啡馆
{
公共int密钥{get;set;}
公共字符串名称{get;set;}
公共字符串Facultet{get;set;}
公共字符串电话{get;set;}
公共列表专门化{get;set;}
...
}
公共阶级专业化
{
公共int密钥{get;set;}
公共字符串名称{get;set;}
公共字符串特殊名称{get;set;}
公共字符串FormaObuch{get;set;}
公共字符串[]显示内部{get;set;}
...
}
我需要选择所选咖啡馆的所有学科。我创造了许多foreach,但我需要它与林克

我试过了,但是一个Cafedra可以有很多专门化,专门化可以有很多disiplin,我不知道如何在LINQ中选择它

我的方法

private static void DiscipliniCafedri()
{
    Console.WriteLine("Выберите кафедру:");
    for (int i = 0; i < Cafedras.Count; i++)
    {
        Console.WriteLine(i + 1 + " " + Cafedras[i].ToString());
    }
    int ID = Convert.ToInt32(Console.ReadLine());

    List<Specialization> spesc = new List<Specialization>();
    Console.Clear();
    Console.WriteLine("Дисциплины выбранной кафедры:");

    foreach (int s in Cafedras[ID - 1].Specializations)
    {
        spesc.Add(Specializations[s - 1]);
    }

    foreach (Specialization s in spesc)
    {
        foreach (string d in s.DisplinsID)
        {
            Console.WriteLine(Disciplinas[Convert.ToInt32(d) - 1].Name);
        }
    }
}
private static void practicicafedri()
{
控制台写入线(“ббббббббббббббб;
for(int i=0;i
LINQ等效物为:

var resultSet = Cafedras[ID - 1].Specializations
                .Select(s => Specializations[s - 1])
                .SelectMany(s => s.DisplinsID);

foreach(var d in resultSet)
     Console.WriteLine(Disciplinas[Convert.ToInt32(d) - 1].Name);

转换嵌套循环不需要联接-您可以执行一系列
Select
调用:

var res = Cafedras[ID - 1]
    .Specializations
    .Select(s => Specializations[s - 1])
    .SelectMany(s => Disciplinas[Convert.ToInt32(s.DisplinsID) - 1].Name)
    .ToList();
上面,

  • 第一个
    选择
    表示创建
    规格的第一个循环
  • 第二个
    SelectMany
    表示两个嵌套循环

这将在
res
中生成
列表
,其中包含可以打印的主题名称。

Selectmany例如cagedra。Selectmany(c=>c.specilation)可能的英文副本,“аафааааааааааааа1072在建模大学的上下文中,displinsin是数组。我做了一个像Aomine一样的选择。谢谢var resultSet=Cafedras[ID-1].Specializations.Select(s=>Specializations[s-1]).SelectMany(s=>s.displainsin.Select(s=>stricalas[Convert.ToInt32(s)-1]);