2011-07-19 24 views
1

我想用删除从列表对象LINQ, 例如删除对象:如何从多个变量列表使用LINQ

public class Item 
{ 
    public string number; 
    public string supplier; 
    public string place; 
} 

现在我想用相同的号码删除所有的项目和出现一次以上的供应商。
谢谢

+2

至于我的问题是不明确 – sll

+0

我认为'出现在至少多于one'应该读'出现在列表中超过once' – fearofawhackplanet

回答

5

这将是在地方做一点点繁琐,但如果你不介意创建一个新的列表,你可以使用LINQ。

指定您的项目平等的定义,最简单的方法是将投射到一个匿名类型的实例 - C#编译器增加了代表您明智的平等的实现:

List<Item> items = ... 

// If you mean remove any of the 'duplicates' arbitrarily. 
List<Item> filteredItems = items.GroupBy(item => new { item.number, item.supplier }) 
           .Select(group => group.First()) 
           .ToList(); 

// If you mean remove -all- of the items that have at least one 'duplicate'. 
List<Item> filteredItems = items.GroupBy(item => new { item.number, item.supplier }) 
           .Where(group => group.Count() == 1) 
           .Select(group => group.Single()) 
           .ToList(); 

如果我的第一猜测是正确的,你也可以考虑写一个IEqualityComparer<Item>,然后使用Distinct操作:

IEqualityComparer<Item> equalityComparer = new NumberAndSupplierComparer(); 
List<Item> filteredItems = items.Distinct(equalityComparer).ToList(); 

顺便说一句,这不是常规的类型暴露的公共字段(使用属性)或公共成员ŧ o有骆驼案件名称(使用pascal案件)。这将是更地道:

public class Item 
{ 
    public string Number { get; set; } 
    public string Supplier { get; set; } 
    public string Place { get; set; } 
} 
+0

我会尽力的,漂亮的为快速思考工作。 – guyl

+0

是否可以在不使用'new {item.NUmber,item.Supplier}'的情况下使用它并保留原始类? – guyl

+0

我只想说,一方面很难做到,另一方面可能会更容易一些,也就是说(我是一个白痴)让我们选择多于一个的项目,而不是删除不同的项目。现在我怎么能通过更多的财产分组他们? – guyl