[英]Lambda expression C# Union Where
我有上課的對象
public class Person
{
public string Error { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
有些沒有錯誤(沒有名稱和年齡)有些沒有錯誤(並且名稱和年齡)
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中選擇所有有錯誤的人對象,並合並來自同一p1中沒有錯誤的所有人。
我需要類似上面代碼中的內容,但是它不起作用。 如何在一個lambda子句中編寫它?
非常感謝?
p1.Where(c => string.IsNullOrEmpty(c.Error))
.Union(p1.Where(d => !string.IsNullOrEmpty(d.Error)))
.ToArray()
您需要在IEnumberable
添加第二個.Union
。 由於對象已經是您需要的類型,因此無需再次投影。
盡管在這種情況下有點無聊,但結果與p1
相同
這樣可以避免出現“錯誤”但“名稱和年齡”具有值或沒有“錯誤”但“名稱和年齡”不具有值的情況。
分離:
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();
好的,我自己找到了解決方案,應該是這樣的:
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();
抱歉,也許我的答案不太清楚。 謝謝大家的答復。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.