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;} } |
我想基于类型值删除
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 } } |
我的示例并不像您的代码那么复杂,但是如果您有一个值数组,并且希望通过基于特定条件删除元素来"精简"该数组,那么您不必事先转换为列表。使用
如果有帮助,请告诉我。
当您将数组复制到列表,然后应用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(); |