簡體   English   中英

Lambda表達式C#Union Where

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM