List<TestModel> list = new List<TestModel>(); list.Add(new TestModel(1, "ss")); list.Add(new TestModel(1, "ss")); list.Add(new TestModel(2, "rr")); list.Add(new TestModel(3, "dd")); list.Add(new TestModel(3, "dd")); list.Add(new TestModel(3, "cc")); list.Add(new TestModel(4, "tt")); list.Add(new TestModel(4, "tt")); list.Add(new TestModel(5, "gg")); list.Add(new TestModel(5, "gg")); list.Add(new TestModel(5, "gg")); list.Add(new TestModel(5, "gg")); var result = from data in list group data by new { data.ID, data.Name } into g select new { ID = g.Key.ID, Name = g.Key.Name, Count = g.Count() }; var finalResult = result.GroupBy(p => p.ID).Select(g => g.OrderByDescending(c => c.Count).First()); foreach (var model in finalResult) { Console.WriteLine(string.Format("{0}-{1}-{2}", model.ID.ToString(), model.Name, model.Count.ToString())); }
DataTable dt = new DataTable(); dt.Columns.Add("序号",typeof(int)); dt.Columns.Add("名称", typeof(string)); dt.Rows.Add(1, "ss"); dt.Rows.Add(1, "ss"); dt.Rows.Add(2, "rr"); dt.Rows.Add(3, "dd"); dt.Rows.Add(3, "dd"); dt.Rows.Add(3, "cc"); dt.Rows.Add(4, "tt"); dt.Rows.Add(4, "tt"); dt.Rows.Add(5, "gg"); dt.Rows.Add(5, "gg"); dt.Rows.Add(5, "gg"); dt.Rows.Add(5, "gg"); List<Sample> list = new List<Sample>(); for (int i = 0; i < dt.Rows.Count; i++) { Sample model = new Sample(); model.Number = Convert.ToInt32(dt.Rows[i][0]); model.Name = dt.Rows[i][1].ToString(); list.Add(model); } var obj = list.Select(a => new { a.Number, a.Name }).Distinct().ToList();
可以直接对dt进行linq查询的
感谢提醒,看Tim哥的博客学习了一下 DataTable table = new DataTable(); table.Columns.Add("ID", typeof(int)); table.Columns.Add("Name", typeof(string)); table.Rows.Add(new object[] { 1, "ss" }); table.Rows.Add(new object[] { 1, "ss" }); table.Rows.Add(new object[] { 2, "rr" }); table.Rows.Add(new object[] { 3, "dd" }); table.Rows.Add(new object[] { 3, "dd" }); table.Rows.Add(new object[] { 3, "cc" }); table.Rows.Add(new object[] { 4, "tt" }); table.Rows.Add(new object[] { 4, "tt" }); table.Rows.Add(new object[] { 5, "gg" }); table.Rows.Add(new object[] { 5, "gg" }); table.Rows.Add(new object[] { 5, "gg" }); table.Rows.Add(new object[] { 5, "gg" }); var result = from t in table.AsEnumerable() group t by new { ID = t.Field<int>("ID"), Name = t.Field<string>("Name") } into g select new { ID = g.Key.ID, Name = g.Key.Name, Count = g.Count() }; var finalResult = result.GroupBy(p => p.ID).Select(g => g.OrderByDescending(c => c.Count).First()); finalResult.ToList().ForEach(r => Console.WriteLine(string.Format("{0}-{1}-{2}", r.ID, r.Name, r.Count)));
dt.PrimaryKey=new DataColumn[]{...}可以伤害PrimaryKey,利用这一特性配合try{}cache(){}进行处理
然后在list基础上
list.Where(a=>a.id&&a.name....)这年头不会拉姆达表达式可不行哦当然可选的还有简单的去做双重循环dt本身也有很多老古方法可以用 不过比对起来不如linq时代后的东西那么简单
三层很早就开始转dt为list做所有操作就是因为List<Model对象>比同样结构的dt要容易处理的多
double interest;
double total;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();//创建TataTable对象
DataRow dr;
//创建TataTable中的DataColumn列,即构造DataTable对象的骨架
dt.Columns.Add(new DataColumn("月份", typeof(int)));
dt.Columns.Add(new DataColumn("现存款数", typeof(float)));
dt.Columns.Add(new DataColumn("利息", typeof(float)));
dt.Columns.Add(new DataColumn("本息和", typeof(float)));
for (int i = 0; i <= 11; i++)
{
if (!(i > 0))
{
interest = 0;
total = 500;
}
else
{
interest=(total * 0.05);
total = (500 + interest + total);
}
dr = dt.NewRow();
dr[0] = i + 1;
dr[1] = 500;
dr[2] = interest;
dr[3] = total;
dt.Rows.Add(dr);
}//codego.net/11/1/1/
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
大哥 麻烦你where 出来我看看,我要是会了我就写出来了。
听起来好像挺简单,问题的提问你还没看清楚呀, 如果id 有3条, 如果其中name 不等则这三条都 不需要,,麻烦你where出来我看看, 谢谢
直接写个双重for循环遍历判断一下不就得了1.外循环,按行循环,for(int row=0;row<count;row++)
2.内循环,for(int i=0;i<row;i++)
3.最内层判断,if(dt.rows[row][0].ToString()==dt.rows[i][0].ToString() && dt.rows[row][1].ToString()==dt.rows[i][1].ToString())
4.最好加入字典,否则你还要判断新表里是否加入了重复数据给你写个伪代码,你自己应该就会转换成代码了.如果你连for循环也不会写,还是放弃编程吧
DataTable dt = new DataTable();
dt.Columns.Add("1");
dt.Columns.Add("2"); string[] c1 = new string[] { "1", "1", "2", "3", "3", "3", "4", "4", "5", "5", "5", "5", };
string[] c2 = new string[] { "ss", "ss", "rr", "dd", "dd", "cc", "tt", "tt", "gg", "gg", "gg", "gg", };
for (int i = 0; i < 12; i++)
{
DataRow dr = dt.NewRow();
dr[0] = c1[i];
dr[1] = c2[i];
dt.Rows.Add(dr);
} Dictionary<string, string> d = new Dictionary<string, string>();
for (int i = 0; i < dt.Rows.Count; i++)
{
for (int j = 0; j < i; j++)
{
if (dt.Rows[i][0].ToString() == dt.Rows[j][0].ToString() && dt.Rows[i][1].ToString() == dt.Rows[j][1].ToString())
{
d[dt.Rows[i][0].ToString()] = dt.Rows[i][1].ToString();
}
}
}
break;
这样更好一点
找到一样的了就可以结束循环,不需要再往下继续找了
list.Add(new TestModel(1, "ss"));
list.Add(new TestModel(1, "ss"));
list.Add(new TestModel(2, "rr"));
list.Add(new TestModel(3, "dd"));
list.Add(new TestModel(3, "dd"));
list.Add(new TestModel(3, "cc"));
list.Add(new TestModel(4, "tt"));
list.Add(new TestModel(4, "tt"));
list.Add(new TestModel(5, "gg"));
list.Add(new TestModel(5, "gg"));
list.Add(new TestModel(5, "gg"));
list.Add(new TestModel(5, "gg"));
var result = from data in list
group data by new { data.ID, data.Name } into g
select new { ID = g.Key.ID, Name = g.Key.Name, Count = g.Count() };
var finalResult = result.GroupBy(p => p.ID).Select(g => g.OrderByDescending(c => c.Count).First());
foreach (var model in finalResult)
{
Console.WriteLine(string.Format("{0}-{1}-{2}", model.ID.ToString(), model.Name, model.Count.ToString()));
}
dt.Columns.Add("序号",typeof(int));
dt.Columns.Add("名称", typeof(string)); dt.Rows.Add(1, "ss");
dt.Rows.Add(1, "ss");
dt.Rows.Add(2, "rr");
dt.Rows.Add(3, "dd");
dt.Rows.Add(3, "dd");
dt.Rows.Add(3, "cc");
dt.Rows.Add(4, "tt");
dt.Rows.Add(4, "tt");
dt.Rows.Add(5, "gg");
dt.Rows.Add(5, "gg");
dt.Rows.Add(5, "gg");
dt.Rows.Add(5, "gg"); List<Sample> list = new List<Sample>();
for (int i = 0; i < dt.Rows.Count; i++)
{
Sample model = new Sample();
model.Number = Convert.ToInt32(dt.Rows[i][0]);
model.Name = dt.Rows[i][1].ToString();
list.Add(model);
}
var obj = list.Select(a => new { a.Number, a.Name }).Distinct().ToList();
DataTable table = new DataTable();
table.Columns.Add("ID", typeof(int));
table.Columns.Add("Name", typeof(string));
table.Rows.Add(new object[] { 1, "ss" });
table.Rows.Add(new object[] { 1, "ss" });
table.Rows.Add(new object[] { 2, "rr" });
table.Rows.Add(new object[] { 3, "dd" });
table.Rows.Add(new object[] { 3, "dd" });
table.Rows.Add(new object[] { 3, "cc" });
table.Rows.Add(new object[] { 4, "tt" });
table.Rows.Add(new object[] { 4, "tt" });
table.Rows.Add(new object[] { 5, "gg" });
table.Rows.Add(new object[] { 5, "gg" });
table.Rows.Add(new object[] { 5, "gg" });
table.Rows.Add(new object[] { 5, "gg" });
var result = from t in table.AsEnumerable()
group t by new { ID = t.Field<int>("ID"), Name = t.Field<string>("Name") } into g
select new { ID = g.Key.ID, Name = g.Key.Name, Count = g.Count() };
var finalResult = result.GroupBy(p => p.ID).Select(g => g.OrderByDescending(c => c.Count).First());
finalResult.ToList().ForEach(r => Console.WriteLine(string.Format("{0}-{1}-{2}", r.ID, r.Name, r.Count)));
/*利用DataTable的Select方法和分组*/DataRow[] selectedRows = dataTable.Select("Select Max(id), Max(name) From TableName Group By id, name");这样应该就可以了