如何在LINQ中执行此操作?

时间:2010-11-24 06:20:07

标签: c# linq

我无法表达我想做的事。请帮忙。考虑下面的代码:

void Main()
{
    List<Person> person = new List<Person>
    {
        new Person { Name = "Maria Anders", Age = 21 },
        new Person { Name = "Ana Trujillo", Age = 55 },
        new Person { Name = "Thomas Hardy", Age = 40 },
        new Person { Name = "Laurence Lebihan", Age = 18 },
        new Person { Name = "Victoria Ashworth", Age = 16 },
        new Person { Name = "Ann Devon", Age = 12 }
    };

    person.Select(x => new { x.Name, x.Age }).Dump();
}

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}

我想打印一个人的Name | Age | Status

Status是派生列。如果此人的年龄≥1岁,则其值应为“Adult”,否则为“未成年人”。

6 个答案:

答案 0 :(得分:6)

首先,您需要将一个名为Status的属性添加到类Person

class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Status 
    {
       get { return Age >= 18 ? "Adult" : "Under age"; }
    }
    public override string ToString()
    {
       return string.Format("{0}|{1}|{2}",Name,Age,Status);
    }
}

然后你可以循环进入人员列表来做你的行动:

foreach(Person p in persons)
{
    Console.WriteLine(p);
}
//Or
persons.ForEach( p => Console.WriteLine(p) );

添加Status属性和覆盖ToString方法的原因是将逻辑放在一个位置。否则,假设有一天,您需要将“未成年人”更改为“Nonage”,您不需要在Person班级中的任何地方更改字符串,而只需更改一个位置。

答案 1 :(得分:2)

怎么样:

person.Select(p =>
  String.Format("{0} | {1} | {2}",
  p.Name, p.Age, p.Age >= 18 ? "Adult" : "Under age"))
  .Dump();

然后在其他地方:

static void Dump(this IEnumerable<string> ss)
{
    foreach(var s in ss)
    {
        Console.WriteLine(s);
    }
}

答案 2 :(得分:1)

  person.Select(x => new { x.Name, x.Age ,Status = (x.Age>=18) ? "Adult":"Under Age"})

答案 3 :(得分:1)

var y = person.Select(x =&gt; new {x.Name,x.Age,Status = x.Age&gt; 18?“Adult”:“Minor”});

答案 4 :(得分:0)

尝试:

person.Select(x => new {Name =  x.Name, Age = x.Age, Status = ((x.Age>=18) ? "Adult" :"Child") }); ;

答案 5 :(得分:0)

简单.. sb.ToString()会给你你想要的东西。

    StringBuilder sb = new StringBuilder();

        foreach(Person p in person)
        {
        string status = p.Age >= 18 ? "Adult" : "Not Adult";

        sb.AppendLine(String.Format("{0} {1} {2}",p.Name,p.Age.ToString(),status));
        sb.AppendLine(Environment.NewLine);

        }