再新建一个DataTable,为四列。遍历第一个DataTable,生成第二种的形式。
写个自定义比较器,排序后进行筛选判断。
我以前做过这样一个案例:
abc,goo,aebb,wpp,goaa
等这样的,也是分组,结果如下:
abc,aebb
goaa,goo
wpp
我把代码粘这儿,应该可以帮到你。
FactoryComparer类
namespace _56fix.BLL
{
/// <summary>
/// 适用于厂商比较名称的比较器
/// </summary>
public class FactoryComparer : IComparer<Factory>
{
public int Compare(Factory x, Factory y)
{
return string.Compare(x.FirstLetter, y.FirstLetter);
}
}
}
public string GetFactories()
{
StringBuilder str = new StringBuilder();
List<Factory> items = FactoryManager.GetFactories(false, true);
char ch = '0';
str.Append("<div class='clear'></div><div class='bd'>");
str.Append("<div class='descTitle f14 cb'>厂商统计信息</div>");
str.AppendFormat("<div class='p10'>厂商总数:{0}</div>", items.Count);
str.Append("</div><div class='clear separator'></div>");
foreach (Factory item in items)
{
char c = item.FirstLetter[0];
if (c > ch)
{
if (ch != '0')
{
str.Append("</ul></div></div><div class='clear separator'></div>");
}
str.Append("<div class='bd'>");
//链接Id样式:表名_类型Id
str.AppendFormat("<div class='descTitle f14 cb'>名称以 {0} 开头的厂商</div>", c);
str.Append("<div class='p10'><ul class='listNav'>");
}
str.AppendFormat("<li><a href='../ShowFactory_{0}.aspx' id='Factory_0_{1}' title='{2}'>{2}</a></li>", item.Id, item.Id, item.BrandName);
ch = c;
}
str.Append("</ul></div></div><div class='clear separator'></div>");
return str.ToString();
}
数据库处理吧,程序处理太麻烦了。
我写了一个函数,你试试看吧,输入的 table 必须要有4列,第4列需要是string 类型,前3列存储你说的数据。
static void CompressTable(DataTable table)
{
Dictionary<string, DataRow> dict = new Dictionary<string, DataRow>(); //这个字典用于查找第一第二列相同的项目
List<DataRow> removeRows = new List<DataRow>(); //这个List 存储需要删除的重复行
foreach (DataRow row in table.Rows)
{
string key = row[0].ToString() + ";" + row[1].ToString();
DataRow row1;
if (dict.TryGetValue(key, out row1))
{
//如果找到重复的行,将第三列和第一个重复行的第4列合并
if (row1[4] == DBNull.Value)
{
row1[4] = row[3].ToString();
}
else
{
row1[4] = row1[4].ToString() + ";" + row[3].ToString();
}
removeRows.Add(row); //将这一行加入要删除的行列表中
}
else
{
dict.Add(key, row);
}
}
//删除重复的行
foreach (DataRow row in removeRows)
{
table.Rows.Remove(row);
}
}
同上楼
先查出前三列构建一个 DataTable
最后查出第一列和最后一列构建一个 DataTable
循环对比把结果拿出来