C#linq的group、count、sum,记一下。
//使用linq在内存中分组
var qry = from t in dtMain.AsEnumerable()
group t by new { sName = t.Field<string>("sName"), sID = t.Field<string>("sID") } into grp
select new
{
sID = grp.Key.sID,
sName = grp.Key.sName,
nRows = grp.Count(p => p.Field<string>("sID") == grp.Key.sID)
};
if (qry.ToList().Count > 0)
qry.ToList().ForEach(p =>
{ //追加写入行
iData.initializeRecord(db = dtGroup.NewRow());
dtGroup.Rows.Add(db);
db["sID"] = p.sID;
db["sName"] = p.sName;
db["nRows"] = p.nRows;
});
再加上一个取出来之后排序:
StringBuilder builder = new StringBuilder();
//查出来
var qry = from t in dbMain.AsEnumerable()
where (t.Field<string>("部门标记") == "" && !string.IsNullOrEmpty(t.Field<string>("ksmc")))
group t by new { ksmc = t.Field<string>("ksmc") } into grp
//orderby grp.Key.ksmc //排序
select new
{ //值、重复次数
ksmc = grp.Key.ksmc,
nTotal = grp.Count(p => p.Field<string>("ksmc") == grp.Key.ksmc)
} into tmp
orderby tmp.nTotal //按照数量排序
select tmp;
//拼接起来
qry.ToList().ForEach(p =>
{ //拼接起来
builder.AppendLine(p.ksmc + ",重复" + p.nTotal + "次;");
});
var x = rows.AsEnumerable().GroupBy(p => p.Field<string>("sTuan"));
sTuanWhere = "";
foreach (IGrouping<string, DataRow> itm in x.ToList())
{
//foreach (var dr in itm) if (string.IsNullOrEmpty(sTuan)) sTuan = dr["sTuan"].ToString(); else break;
if (string.IsNullOrEmpty(sTuan = itm.Key)) continue; //没有团号的意外错误
//发出一个团的
}
var storeGroup = dtFrom.AsEnumerable().GroupBy(t => new
{ //linq-groupby分组
sStorer = t.Field<string>("sStorer"),
sStorerName = t.Field<string>("sStorerName"),
sParty3ID = t.Field<string>("sParty3ID")
});