求一个linq查询DataTable的问题
我有一个table,里面有a,b,c,d四列数据,现在我有一个规则,就是查询a+b+c的组合,如果有超过2行数据的这个组合是一样的,就说明有重复数据、。比如:
a b c d
-----------------------
qq ss dd fg
qq ss dd reb
qq acd dd tbg
由于第一行和第二行的a+b+c的组合相同,就被视为有重复数据。linq可不可以像sql一样,通过count查询判断,当count>1就说明有重复数据呢?哪位大侠指点下?谢谢了。
[解决办法]
LINQ的group by +count
[解决办法]
- C# code
DataTable dt = new DataTable(); dt.Columns.Add("a"); dt.Columns.Add("b"); dt.Columns.Add("c"); dt.Columns.Add("d"); dt.LoadDataRow(new object[] { "qq", "ss", "dd", "fg" },false); dt.LoadDataRow(new object[] { "qq", "ss", "dd", "reb" }, false); dt.LoadDataRow(new object[] { "qq", "acd", "dd", "tbg" }, false); var res = dt.AsEnumerable().GroupBy(p => p["a"].ToString() + p["b"].ToString() + p["c"].ToString());
[解决办法]
- C# code
void Main(){ DataTable dt = new DataTable(); dt.Columns.Add("a"); dt.Columns.Add("b"); dt.Columns.Add("c"); dt.Columns.Add("d"); dt.LoadDataRow(new object[] { "qq", "ss", "dd", "fg" },false); dt.LoadDataRow(new object[] { "qq", "ss", "dd", "reb" }, false); dt.LoadDataRow(new object[] { "qq", "acd", "dd", "tbg" }, false); var query= dt.AsEnumerable().GroupBy(d=> new {a=d.Field<string>("a"),b=d.Field<string>("b"),c=d.Field<string>("c")}) .Where(g=>g.Count()>1); Console.WriteLine(query.Count()>0?"有重复":"无重复");}
[解决办法]
代码类似,只不过你这是字符串
参考http://topic.csdn.net/u/20120412/15/b36be23a-c01e-49b3-a011-3ca1b2acc68b.html
[解决办法]
- C# code
DataTable dt = new DataTable("test"); dt.Columns.Add(new DataColumn("a", typeof(string))); dt.Columns.Add(new DataColumn("b", typeof(string))); dt.Columns.Add(new DataColumn("c", typeof(string))); dt.Columns.Add(new DataColumn("d", typeof(string))); dt.Rows.Add("qq", "ss", "dd", "fg"); dt.Rows.Add("qq", "ss", "dd", "reb"); dt.Rows.Add("qq", "acd", "dd", "fg"); var result = dt.AsEnumerable().GroupBy(r => new { a = r["a"].ToString(), b = r["b"].ToString(), c = r["c"].ToString() }).Where(g => g.Count() > 1).Count() > 0; Console.WriteLine("result: " + result.ToString()); Console.ReadKey();
[解决办法]
DataTable dt = new DataTable();
dt.Columns.Add("a",typeof(string));
dt.Columns.Add("b",typeof(string));
dt.Columns.Add("c",typeof(string));
dt.Columns.Add("d",typeof(string));
dt.LoadDataRow(new object[] { "qq", "ss", "dd", "fg" }, false);
dt.LoadDataRow(new object[] { "qq", "ss", "dd", "reb" }, false);
dt.LoadDataRow(new object[] { "qq", "acd", "dd", "tbg" }, false);
var s = dt.AsEnumerable().GroupBy(t => t.Field<string>("a") + t.Field<string>("b") + t.Field<string>("c")).Where(t => t.Count() > 1);
foreach (var temp in s)
{
Response.Write(string.Format("重复数据:{0},重复个数:{1}", temp.Key, temp.Count()));
}