我想用删除从列表对象LINQ, 例如删除对象:如何从多个变量列表使用LINQ
public class Item
{
public string number;
public string supplier;
public string place;
}
现在我想用相同的号码删除所有的项目和出现一次以上的供应商。
谢谢
我想用删除从列表对象LINQ, 例如删除对象:如何从多个变量列表使用LINQ
public class Item
{
public string number;
public string supplier;
public string place;
}
现在我想用相同的号码删除所有的项目和出现一次以上的供应商。
谢谢
这将是在地方做一点点繁琐,但如果你不介意创建一个新的列表,你可以使用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; }
}
至于我的问题是不明确 – sll
我认为'出现在至少多于one'应该读'出现在列表中超过once' – fearofawhackplanet