有沒有辦法從任何類型的集合(Control.Items,List ....)中僅使用LINQ刪除除第一個以外的所有項目?如何使用LINQ從集合中刪除x項目?
回答
如何使用反射?
static void RemoveButFirst(object o){
Type t = o.GetType();
System.Reflection.MethodInfo rm = t.GetMethod("RemoveAt",
new Type[]{typeof(int)});
System.Reflection.PropertyInfo count = t.GetProperty("Count");
for (int n = (int)(count.GetValue(o,null)) ; n>1; n--)
rm.Invoke(o, new object[]{n-1});
}
這將工作任何時候您的收藏暴露的int Count
屬性和方法RemoveAt(int)
,我認爲這些收藏應該。
和更簡潔的版本,使用dynamic
,如果你用C#4.0的工作:
public static void RemoveBut(dynamic col, int k){
for (int n = col.Count; n>k; n--)
col.RemoveAt(n-1);
}
您可以使用.Take(1)
,但它返回一個新的集合,並保留原來的不變。
LINQ的想法來自函數式編程,其中一切都是不可變的,因此,他們不能用LINQ修改集合。
喬恩斯基特對這個問題的評論:LINQ equivalent of foreach for IEnumerable<T>
如何(在LINQ):
var result = list.Where(l => l != list.First());
但是,這會更好:
var result = list.Take(1);
號LINQ設計用於查詢集合(無副作用),不用於添加或刪除項目。
你可以做的是寫一個查詢,需要收集的第一個元素:
var result = source.Take(1);
注意,LINQ並不適用於所有類型的集合的工作;你需要一個LINQ提供者來使LINQ工作。例如,source
必須實現IEnumerable <T>才能使用Enumerable Class(LINQ-to-Objects)的擴展方法。
那麼我沒有別的選擇...無論如何,謝謝 – eugeneK
List<string> collection = new List<string>();
collection.RemoveAll(p => p.StartsWith("something"));
所以唯一的方法是刪除使用對象p的一些值?有沒有辦法刪除使用索引? – eugeneK
值得注意的是'RemoveAll'對於'所有集合類型'都不存在,並且不使用LINQ。 –
@eugeneK您可以使用removeAt(),但它只能刪除1個項目。 – shenhengbin
listXpto.Where(x=>true /* here goes your query */)
.Select(x=>{listXpto.Remove(x); return null})
但我不知道的,真正的效用。
請記住,remove方法是針對ILists的,而不是一般的IQueryable。
- 1. 使用linq從集合中刪除項目
- 2. 使用LINQ刪除ArrayList中的項目集合
- 3. 如何使用linq從第二個集合中刪除出現在第一個集合中的每個項目?
- 4. MongoDB:從子集合中刪除項目
- 5. 休眠 - 從集合中刪除項目
- 6. Backbone.js:從集合中刪除項目
- 7. 從對象集合中刪除項目
- 8. 從LINQ集合中刪除一個項目
- 9. 如何從實體框架集合中刪除項目子集
- 10. 使用LINQ從屬性值中刪除項目使用LINQ
- 11. 如何使用Linq從匿名IEnumerable集合中選擇項目
- 12. 如何從C#中的Observable集合中刪除項目
- 13. 如何從DOM中的集合中刪除項目,GWT
- 14. 如何從ListView控件在C#中使用LINQ刪除項目
- 15. 刪除刪除特定集合項目
- 16. 從TFS 2010中的項目集合中刪除項目?
- 17. 使用實體框架從集合中刪除項目
- 18. 如何從Meteor的列表集合中刪除項目?
- 19. 如何從持久化JDO的集合中刪除項目?
- 20. 刪除的項目,如果使用LINQ
- 21. Winform如何使用SelectedValue從組合框中刪除項目?
- 22. 刪除實體集合中的項目
- 23. 如何從LINQ to SQL中的子集合中刪除記錄?
- 24. 如何更新/刪除項目的項目集合
- 25. 從LINQ中刪除項目(removeAll)
- 26. 如何在Clojure中刪除集合中的第n個項目?
- 27. 如何從集合B中刪除集合A中的單個集合項目的所有實例?
- 28. 如何使用LINQ從數據集中刪除記錄
- 29. 如何添加/刪除項目到組合框集合?
- 30. 如何從MongoDB中刪除system.profile集合?
第一個獨特然後別人? –
LINQ並非真正用於從列表中刪除項目。這是一種查詢語言,因此旨在從列表中選擇項目。然後在LINQ之外完成刪除。 – Jens
'。拿(1)',儘管這並沒有將它從原始中刪除。 –