如何使用Linq在列表内打印列表

花园花

如何使用Linq打印出所有人员及其宠物。我只想打印出有宠物的人。

首选结果如下:

Kate Bed:
   Rex
   Sally

我的无效解决方案在这里:

class Program
{
    static void Main(string[] args)
    {
        result();
    }
static void result() {    

        var list = StaticGenator.getPersons().Where(x => x.Pets != null);
        foreach (var person in list)
        {
            Console.WriteLine(person.Firstname + " " + person.Lastname + ":");
            foreach(var pet in list){
                Console.WriteLine("   " + pet.Pets);
            }
        }

    }

我得到的是:

    Kate Bed: 
       system.collection.generic.list'1[MainLibrary.Pet]
       system.collection.generic.list'1[MainLibrary.Pet]

这是了解我在问什么的代码:

数据保存在这里:

 public static class StaticGenator
    {
        public static List<Person> getPersons()
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person() { Firstname = "Sam", Lastname = "Car", BirthDate = new DateTime(2001, 01, 01), PersonId = 1, Sex = Sex.Man });
            persons.Add(new Person() { Firstname = "Kate", Lastname = "Bed", BirthDate = new DateTime(1995, 11, 11), PersonId = 2, Sex = Sex.Woman, Pets = new List<Pet>() { new Pet { Firstname = "Rex", BirthDate = new DateTime(2007, 1, 1), Sex = Sex.Man, PetId = 1 }, new Pet { Firstname = "Sally", BirthDate = new DateTime(2004, 2, 1), Sex = Sex.Woman, PetId = 2 } } });
            return  persons;
        }
    }

人员类别:

public class Person
{
    public int PersonId { get; set; }
    public string Firstname { get; set; }
    public string Lastname { get; set; }
    public DateTime BirthDate { get; set; }
    public Sex Sex{ get; set; }
    public int Age { 
        get 
        {
            var age= DateTime.Now.Year - BirthDate.Year;
            if (DateTime.Now.Day >= BirthDate.Day && DateTime.Now.Month >= BirthDate.Month)
                return age;
            else
                return age- 1;
        }      
    }
    public List<Pet> Pets { get; set; }

}

宠物课:

public class Pet 
{
    public int PetId { get; set; }
    public String Firstname { get; set; }
    public Sex Sex { get; set; }
    public DateTime BirthDate { get; set; }
    public int Age { get; set; }
}

性别枚举:

public enum Sex{
    Man,
    Woman
}
谢尔盖·别列佐夫斯基(Sergey Berezovskiy)
foreach (var person in list)
{
    Console.WriteLine(person.Firstname + " " + person.Lastname + ":");

    foreach(var pet in person.Pets) // iterate over Pets of person
    {
        Console.WriteLine("   " + pet.Firstname); // write pet's name
    }
}

请记住-如果有人将null宠物添加到宠物集合中,或者宠物列表为空,您可能会遇到问题因此,获取带宠物的人的正确查询可能是:

var peopleWithPets = from p in StaticGenator.getPersons()
                     where p.Pets != null &&
                           p.Pets.Any() &&
                           p.Pets.All(x => x != null)
                     select p;

也使用字符串格式:

foreach (var person in peopleWithPets)
{
    Console.WriteLine("{0} {1}:", person.Firstname, person.Lastname);

    foreach(var pet in person.Pets)        
        Console.WriteLine("\t{0}", pet.Firstname);        
}

另外,我建议您遵循MicroSoft建议的大写样式

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用LINQ获取范围内的记录列表

来自分类Dev

如何使用LINQ在列表中添加列表

来自分类Dev

打印对象列表以及列表内的列表

来自分类Dev

打印对象列表以及列表内的列表

来自分类Dev

如何快速使用格式打印列表?

来自分类Dev

如何使用javascript打印出通用列表?

来自分类Dev

如何使用ToList()打印多个列表项?

来自分类Dev

如何使用棋子位置列表打印棋盘

来自分类Dev

如何使用递归垂直打印列表?

来自分类Dev

如何使用print()打印链接列表

来自分类Dev

如何使用 scala 打印地图值列表

来自分类Dev

如何使用地图打印列表元素?

来自分类Dev

如何使用格式功能打印列表

来自分类Dev

使用LINQ如何使用元素索引转换列表列表

来自分类Dev

如何打印元组列表?

来自分类Dev

如何打印列表索引

来自分类Dev

如何从列表中打印?

来自分类Dev

如何打印元组列表?

来自分类Dev

如何打印列表索引

来自分类Dev

用空格打印列表内的列表元素

来自分类Dev

如何使用Linq对列表列表进行分组和求和

来自分类Dev

如何使用LINQ从kvp列表中删除kvp列表?

来自分类Dev

如何使用 LINQ 加入列表和大型列表/表

来自分类常见问题

如何使用LINQ异步等待任务列表?

来自分类Dev

如何使用Linq(汇总)折叠至列表?

来自分类Dev

如何使用linq填充嵌套列表类

来自分类Dev

如何使用ViewModels从LINQ查询返回列表

来自分类Dev

如何使用LINQ从列表中获取索引

来自分类Dev

如何使用LINQ C#过滤列表