控制台中未显示列表列表中的项目

时间:2014-01-23 15:04:10

标签: c# .net linq

第三个foreach语句告诉我它无法将System.Collections.Generic.IEnumerable<string>转换为String。显示ID CTAF,显示nomClient但不显示numCompte。我该如何解决这个问题?

以下是代码:

public static void generateCTAF(string pathXml, string outputPDF)
{
            List<FichierCTAF> fc = new List<FichierCTAF>();

            fc = getXmlFCtaf(pathXml);

            foreach (FichierCTAF f in fc)
            {
                 Console.WriteLine("ID CTAF : {0}", f.IdFichierCtaf);

                foreach(string nomClient in f.Clients.Select(y => y.NomClient))
                {
                     Console.WriteLine(" Nom Client : {0}", nomClient);
                     foreach (string idCompte in f.Clients.Select(y => y.ComptesClient.Select(z => z.NumCompte)))
                        Console.WriteLine(" Num Compte : {0}\n", idCompte);
                }
            }
}

1 个答案:

答案 0 :(得分:2)

public static void generateCTAF(string pathXml, string outputPDF)
{
    // do not initialize fc variable with empty list
    List<FichierCTAF> fc = getXmlFCtaf(pathXml); 

    foreach (FichierCTAF f in fc)
    {
        Console.WriteLine("ID CTAF : {0}", f.IdFichierCtaf);

        foreach(var client in f.Clients) // select client here
        {
             // display Nom of current client
             Console.WriteLine(" Nom Client : {0}", client.NomClient);

             // enumerate comptes clients of current client
             foreach (var comptesClient in client.ComptesClient))
               Console.WriteLine(" Num Compte : {0}\n", comptesClient.NumCompte);
        }
    }
}

注意:您有错误,因为f.Clients.Select(y => y.ComptesClient.Select(z => z.NumCompte))会返回字符串序列的序列,即IEnumerable<IEnumerable<string>>。因此,当您尝试枚举此查询的结果时,您将获得IEnumerable<string>类型的项目,而不是简单的string

您的密码中的另一个问题是您已选择f的所有ComptesClient。但是您应该只加载与当前客户端相关的数据。