Lambda expression C# Union Where
本文关键字:Where Union expression Lambda | 更新日期: 2023-09-27 18:14:44
我有一个类
的对象public class Person
{
public string Error { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
有的有Error(没有Name和Age)有的没有Error(没有Name和Age)
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()
我需要创建第二个数组p2,在这里我可以选择p1中所有有错误的person对象,并将相同p1中所有没有错误的person合并。
我需要类似于上面的代码,但它不工作。我怎么把它写在一个lambda子句里?
谢谢你?
p1.Where(c => string.IsNullOrEmpty(c.Error))
.Union(p1.Where(d => !string.IsNullOrEmpty(d.Error)))
.ToArray()
需要在.Union
中添加第二个IEnumerable
。由于对象已经是您需要的类型,因此无需再次投影。
虽然在这种情况下没有实际意义,但结果与p1
好的,我自己找到了解决方案,应该是这样的:
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();
对不起,也许我的回答不太清楚。谢谢大家的回复。
这将避免出现出现错误但是Name和Age有值或者没有错误但是Name和Age没有值的情况。
单独:
var p1Err = p1.Where(p => String.IsNullOrEmpty(p.Error) && !String.IsNullOrEmpty(p.Name)
&& !String.IsNullOrEmpty(p.Age));
var p1NoErr = p1.Where(p => !String.IsNullOrEmpty(p.Error) && String.IsNullOrEmpty(p.Name)
&& String.IsNullOrEmpty(p.Age));
var p2 = p1Err.Union(p1NoErr)
.ToArray();
结合:
var p2 = p1.Where(p => String.IsNullOrEmpty(p.Error) && !String.IsNullOrEmpty(p.Name)
&& !String.IsNullOrEmpty(p.Age))
.Union(p1.Where(ip => !String.IsNullOrEmpty(ip.Error)
&& String.IsNullOrEmpty(ip.Name) && String.IsNullOrEmpty(ip.Age)))
.ToArray();