【发布时间】:2017-07-27 16:14:14
【问题描述】:
我的图片如下:
我想做如下两个任务:
第一个:将TOTAL列中的值从小到大排序
第二个:输入需要选择的记录数(例如:4条记录),返回列表中重复的最大项
这是我的代码,但它不起作用。
private void Form1_Load(object sender, EventArgs e)
{
customersBindingSource.DataSource = new List<Customers>();
}
private void btnGet_Click(object sender, EventArgs e)
{
int k;
string temp;
//Step 1: Sort values smallest to largest on TOTAL column
DataTable dt = new DataTable();
DataView dv = new DataView();
dv = dt.DefaultView;
dv.Sort = dv.Table.Columns[3].ColumnName + "ASC";
dt = dv.Table;
//Step 2: Input k rows & return max repeated items in list of Column 1 (BOOK_NAME)
k = Convert.ToInt32(txtkvalue.Text);
for (int i = 0; i < k; i++)
{
temp = dataGridView.Rows[i].Cells[1].Value.ToString();
List<string> prod = new List<string>();
prod.Add(temp);
var grouped = prod.ToLookup(x => x);
var maxRepetitions = grouped.Max(x => x.Count());
var maxRepeatedItems = grouped.Where(x => x.Count() == maxRepetitions)
.Select(x => x.Key).ToList();
//MessageBox.Show(maxRepeatedItems.ToString());
}
}
预期结果(k=4):
- 排序(TOTAL 列):150、200、200、250、300
- 返回书名:Book 2(列表:Book 1、Book 2、Book 2、Book 3)
请帮助为我提供建议。 非常感谢。
【问题讨论】:
-
@Isaac 我稍微编辑了我的答案,所以你不明白背后的原因。希望可以理解
-
@PavelPájaHalbich:感谢您的建议,但它也无法运行并在以下行显示消息:var ordered = baseList.OrderBy(e => e.Total); --> System.ArgumentNullException: '值不能为空。'
-
如果您只是简单地复制代码并运行它,那么是的,您会收到该错误。你看到第一行是什么吗?尽管
baseList已初始化,但有一条评论说您需要实现从数据源收集数据。在它的当前形式下,你可以编译它,但它不会毫无例外地运行。在这里,人们会指导你正确的方向,但没有人会为你做你的工作。