我有一个自定义对象,它从数据库中的表中获取值。让我们称之为产品表。
我的代码填充List<Product>
并使用myCombobox.DisplayMember = "Country"
绑定到多个组合框以显示正确的值。
这是示例代码(没有任何异常,OnFormLoad())。
DatabaseTools dbTools = new DatabaseTools();
List<Product> productList = dbTools.GetProducts();
cboCountry.BeginUpdate();
cboCountry.DataSource = productList ;
cboCountry.DisplayMember = "Country";
cboCountry.EndUpdate();
足够简单。但是,从数据库返回的某些值要么丢失,要么重复,要么在控件中显示之前需要进行字符串格式化。有没有办法做到这一点。否则我的组合框中的数据看起来很糟糕:
答案 0 :(得分:2)
为防止重复产品使用EqualityComparer:
public class ProductCountryEqualityComparer : IEqualityComparer<Product>
{
#region IEqualityComparer<Product> Members
public bool Equals(Product x, Product y)
{
return x != null && y != null && x.Country == y.Country;
}
public int GetHashCode(Product obj)
{
return 0;
}
#endregion
}
然后:
//That will make products distincts according to there Country
productList = productList.Distinct(new ProductCountryEqualityComparer()).ToList();
格式化国家/地区:
productList = productList.Distinct(new ProductCountryEqualityComparer())
.Select(f => new Product()
{
Country = string.Format(f.Country,"SomeFormat")
}).ToList();
订购:
productList = productList.Distinct(new ProductCountryEqualityComparer())
.Select(f => new Product()
{
Country = string.Format(f.Country,"SomeFormat")
}).OrderBy(f => f.Country).ToList();
只需使用最后一个:)
答案 1 :(得分:1)
为什么不LINQ,保存必须访问数据库,因为您没有使用国家/地区对象的唯一ID,这应该有效...
List<string> countries = new List<string>()
{ "Brazil", "Pakistan", "Pakistan", "Norway", "Senegal", "Senegal", "Senegal", };
// Place into a LINQ query and utilise the distinct keyword
var unique = (from c in countries
select c).Distinct().ToArray();
// Test output
Array.ForEach<string>(unique, x => Console.WriteLine(x));
Console.ReadKey();