LINQ高手请进,一个动态组织LINQ查询的问题

FireTiger 2009-04-08 12:04:34

遇到这个问题了:
1 对于不同的var query ,没法只声明一次匿名变量。
2 对于GROUP,Select的内容能否动态的设定,就如同组织字符串一样?

怎么精简下面的代码呢?

if (keyFields.Length == 1)
{
var query =
from t in dt.AsEnumerable()
group t by new
{
g1 = t.Field<string>(keyFields[0])
} into g
where g.Count() > 1
select new
{
GroupKey = g.Key.g1,
Cnt = g.Count(),
Max1 = g.Max(rowIndex => rowIndex.Field<Int32>("RowIndex"))
};
foreach (var q in query)
{
this.richTextBox1.AppendText(keyFields[0] + ":" +
q.GroupKey.ToString() + "有重复项");
}

}
else if (keyFields.Length == 2)
{
var query =
from t in dt.AsEnumerable()
group t by new
{
g1 = t.Field<string>(keyFields[0]),
g2 = t.Field<string>(keyFields[1])
} into g
where g.Count() > 1
select new
{
GroupKey = g.Key,
Cnt = g.Count()
};

//var query2 = dt.AsEnumerable().Where(("").Select(c => c);
foreach (var q in query)
{
this.richTextBox1.AppendText(keyFields + ":" +
q.GroupKey.g1 + "," + q.GroupKey.g2 + "有重复项");
}
}
else if (keyFields.Length == 3)
{
var query =
from t in dt.AsEnumerable()
group t by new
{
g1 = t.Field<string>(keyFields[0]),
g2 = t.Field<string>(keyFields[1]),
g3 = t.Field<string>(keyFields[2])
} into g
where g.Count() > 1
select new
{
GroupKey = g.Key,
Cnt = g.Count()
};
foreach (var q in query)
{
this.richTextBox1.AppendText(keyFields + ":" +
q.GroupKey.g1 + "," + q.GroupKey.g2 +","+q.GroupKey.g3 + "有重复项");
}
}
...全文
74 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
FireTiger 2009-04-08
  • 打赏
  • 举报
回复
。。。就是精简上面的代码啊,没发觉重复量太大么。。。
每个if条件下的,GROUP项不一样,是动态改变的。因此怎么才能把 3中分支给结合一下,动态构造 GROUP项?
kkun_3yue3 2009-04-08
  • 打赏
  • 举报
回复


写一大堆代码,别人根本不知道你想要什么

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧