LINQ高手请进,一个动态组织LINQ查询的问题
遇到这个问题了:
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 + "有重复项");
}
}