Lambda表达式C#Union在哪里

iho*_*rko -1 c# linq asp.net lambda

我有班级的对象

public class Person
    {
        public string Error { get; set; }
        public string Name { get; set; }
        public int Age { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

有些人有错误(没有姓名和年龄),有些人没有错误(姓名和年龄)

Person[] p1 = new Person[] { new Person { Error = "Error1" }, new Person { Name = "Name1", Age = 1 } };



Person[] p2 = p1
                .Where(c => string.IsNullOrEmpty(c.Error))
                .Select(
                    c => new Person { Name = c.Name, Age = c.Age }
                 ).ToArray()
                 Union()
                .Where(d => !string.IsNullOrEmpty(d.Error))
                .Select(
                    d => new Person { Error = d.Error }
                 ).ToArray()
Run Code Online (Sandbox Code Playgroud)

我需要创建第二个数组p2,在那里我可以从p1中选择所有具有Error的人对象,并且联合来自同一个p1但没有错误的所有人.

我需要类似上面的代码,但它不起作用.我怎么能用一个lambda子句写它?

非常感谢?

AD.*_*Net 7

p1.Where(c => string.IsNullOrEmpty(c.Error))
                 .Union(p1.Where(d => !string.IsNullOrEmpty(d.Error)))
                .ToArray()
Run Code Online (Sandbox Code Playgroud)

你需要在IEnumberable里面添加第二个.Union.而且无需再次投影,因为对象已经是您需要的类型.

虽然在这种情况下有点没有实际意义,但结果却是一样的 p1


iho*_*rko 6

好的,我自己找到了解决方案,应该是这样的:

Person[] p2 = p1
            .Where(c => string.IsNullOrEmpty(c.Error))
            .Select(
                c => new Person { Name = c.Name, Age = c.Age }
             )
            .Union(
            p1.Where(d => !string.IsNullOrEmpty(d.Error))
            .Select(
                d => new Person { Error = d.Error }
             )
             ).ToArray();
Run Code Online (Sandbox Code Playgroud)

抱歉,也许我的回答不太清楚。谢谢大家的回复。