C# Распечатка списков | Foreach два списка - PullRequest
0 голосов
/ 10 января 2020

У меня проблемы с печатью моих списков, так как у меня есть необходимая информация в двух отдельных списках. В настоящее время я знаю, как распечатать из одного списка, но не могу понять, как использовать оба списка для распечатки вещей

public static void PregledSvihPolicaOsiguranja()
{
    List<PoliceOsiguranja> lPoliceOsiguranja = DohvatiPoliceOsiguranja();
    List<Klijent> lKlijent = DohvatiKlijente();

    var table = new ConsoleTable("OIB", "Broj Police", "Vrsta Osiguranja", "Ime i prezime", "Datum pocetka", "Datum isteka", "Vrijednost");
    foreach (var PoliceOsiguranja in lPoliceOsiguranja)
    {
            table.AddRow(PoliceOsiguranja.OIB, PoliceOsiguranja.BrojPolice, PoliceOsiguranja.VrstaOsiguranja, PoliceOsiguranja.Ime + " " + PoliceOsiguranja.Prezime, PoliceOsiguranja.DatumPocetka, PoliceOsiguranja.DatumIsteka, PoliceOsiguranja.Vrijednost) ;
    }
    table.Write();
}

Эта часть "PoliceOsiguranja.Ime +" "+ PoliceOsiguranja.Prezime" должна использовать списки "lKlijent" и печатать из этого JSON файла Ime (имя) и Prezime (фамилия)

Спасибо!

РЕДАКТИРОВАТЬ: я пытался использовать Zip, но он не работает для меня

Ответы [ 3 ]

1 голос
/ 10 января 2020

Если вы заинтересованы в печати клиента с указанными им политиками c, то, возможно, сделайте что-то вроде этого:

    foreach (var client in lKlijent)
    {
        PoliceOsiguranja policy = lPoliceOsiguranja.Where(x => x.OIB == client.OIB).FirstOrDefault();
        table.AddRow(policy.property1, policy.property2, client.property1, client.property2) ;
    }

В зависимости от того, как выглядят ваши данные, вам может потребоваться выполнить несколько foreach петли. Если у вас есть одна политика на клиента, то выше работает. Если у вас есть один клиент для каждой политики, вы можете перевернуть l oop и использовать Policies в качестве l oop и искать клиента на основе политики, через которую вы перебираете.

Если у вас есть несколько клиентов для каждой политики, тогда вам лучше использовать отдельный foreach l oop.

    foreach (var policy in lPoliceOsiguranja)
        foreach (var client in lKlijent.Where(x => x.OID == policy.OID))
            table.AddRow(policy.property1, policy.property2, client.property1, client.property2);

и с одинаковыми логиками c, если у вас несколько политик на клиента, переворачивайте циклы и сначала перебирайте клиентов, затем перебирайте политики, соответствующие client.OID.

0 голосов
/ 10 января 2020

Спасибо @Jawad. Это работает, я понятия не имел, как это выяснить.

0 голосов
/ 10 января 2020

Так как у меня не очень много для go в вашем коде, я дам вам более обобщенный пример использования Zip. Допустим, например, что это ваши классы

public class PoliceOsiguranja
{
    public string OIB { get; set; }
}

public class Klijent
{
    public string OIB { get; set; }
}

Мы создадим новый класс, представляющий комбинацию

public class Combination
{
    public PoliceOsiguranja A { get; set; }
    public Klijent B { get; set; }
}

. Используя .Zip, мы объединим ваши два списка в список комбинаций. , Скажем, мы начинаем с этих списков

public static List<PoliceOsiguranja> listA = new List<PoliceOsiguranja> 
{
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja1"},
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja2"},
    new PoliceOsiguranja{ OIB = "PoliceOsiguranja3"},
};
public static List<Klijent> listB = new List<Klijent> 
{
    new Klijent { OIB = "klijent1"},
    new Klijent { OIB = "klijent2"},
    new Klijent { OIB = "klijent3"}
};

Мы можем использовать Zip для создания IEnumerable из комбинаций

IEnumerable<Combination> combinedList 
     = listA.Zip(listB, (a, b) => new Combination { A = a, B = b });

Теперь мы можем использовать их

foreach(Combination item in combinedList)
{
    Console.WriteLine($"PoliceOsiguranja OIB = {item.A.OIB}, Klijent OIB = {item.B.OIB}");
}

Если вы необходимо отсортировать их, скажем, OIB, вы также можете сделать это, выбрав

IEnumerable<Combination> sortedCombinedList = listA.OrderBy(a => a.OIB).Zip(listB.OrderBy(b => b.OIB), (a, b) => new Combination { A = a, B = b });

, но это будет зависеть от вашего варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...