关于c#:使用linq从列表中删除元素

Remove element from list using linq

本问题已经有最佳答案,请猛点这里访问。

我有和对象类型ct_completeOrder,并有以下类:

CT完成订单类

1
2
3
public partial class ct_CompleteOrder {
    private ct_CompleteOrderPayments paymentsField;
}

CT撔ompleteOrderPayments类

1
2
3
4
5
6
7
8
9
10
11
public partial class ct_CompleteOrderPayments {
    private ct_Payment[] paymentField;
    public ct_Payment[] Payment {
    get {
        return this.paymentField;
        }
    set {
        this.paymentField = value;
        }
    }
}

CT U付款类别

1
2
3
public partial class ct_Payment {
    public string type{get; set;}
}

我想基于类型值删除ct_Payment数组的元素。我试图先将其转换为列表以应用removeall,但它不起作用。我做错什么了?

1
completeOrder.Payments.Payment.ToList().RemoveAll(x => x.type =="AUTO");


为什么要转换为列表?我认为这是不必要的步骤。我已经为你创造了一个网络小提琴,让你知道我从我对你的问题的理解中所做的一切。

C.*

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Runtime;
using System.Linq;

public class Program
{
    public static void Main()
    {
        string[] arrayOfItems = new string[5] {"Apple","Banana","Orange","Apple","Grape"};

        var arrayWithoutApples = arrayOfItems.Where(x => x !="Apple").ToArray();

        foreach(var item in arrayWithoutApples)
        {
            Console.WriteLine(item);    
        }

        // Output:

        // Banana
        // Orange
        // Grape

    }
}

我的示例并不像您的代码那么复杂,但是如果您有一个值数组,并且希望通过基于特定条件删除元素来"精简"该数组,那么您不必事先转换为列表。使用Where检索需要或不需要的项,然后使用ToArray()将结果转换为数组变量。

如果有帮助,请告诉我。


当您将数组复制到列表,然后应用LINQ时,链接只是从列表中删除,而不是从数组中删除。

如果要保持数组的大小相同,但有空格,则应使用for循环遍历数组,并将x.type=="auto"的任何值设置为空。

1
2
3
4
5
6
7
for(int i = 0; i < completeOrder.Payments.Payment.Length; i++)
{
    if(completeOrder.Payments.Payment[i].type =="AUTO")
    {
        completeOrder.Paymets.Payment[i] == null;
    }
}

否则,如果要更改数组的实际大小,只需将付款设置为已更改的列表。removeall不返回列表(它返回void),因此您可以反转逻辑,只使用一个where语句

1
completeOrder.Payments.Payment = completeOrder.Payments.Payment.Where(x => x.type !="AUTO").ToArray();