我仍然是C#的新手,我想知道是否有内置函数来执行以下操作:
- 我正在通过DataTable将数据库中的行加载到 DataGridView
- 我有很多行在一列中具有相同的值,但在antoher列中有不同的值,EG:
NAME, PRICE
chair, 7.00
chair, 6.00
chair, 8.00
table, 15.00
table, 17.00
plate, 4.00
plate, 4.50
有没有人知道如何遍历每一行,并为每个产品选择最便宜的价格并将其发送到另一个列表/对象?
我今天才开始使用DataTables和DataGridView元素,所以我有点不确定最好的方法。基本上我想要一个结束列表,其中包含每个产品中的一个,旁边找到最便宜的价格。 EG
NAME, PRICE
chair, 6.00
table, 15.00
plate, 4.00
我不确定在这种情况下使用对象,列表或词典是否是最好的,并且想知道是否有人可以提供更多的光。 :)
感谢您的帮助
答案 0 :(得分:4)
考虑到你datatable
看起来像这样:
var dt=new DataTable();
dt.Columns.Add("NAME",typeof(string));
dt.Columns.Add("PRICE",typeof(float));
dt.Rows.Add("chair", 7.00);
dt.Rows.Add("chair", 6.00);
dt.Rows.Add("chair", 8.00);
dt.Rows.Add("table", 15.00);
dt.Rows.Add("table", 17.00);
dt.Rows.Add("plate", 4.00);
dt.Rows.Add("plate", 4.50);
你有一个想要以这样的方式呈现信息的对象:
public class Foo
{
public string Name {get;set;}
public float Price {get;set;}
}
您可以执行这样的linq查询以获取最低价格和名称:
var result= (
from row in dt.AsEnumerable()
group row by row.Field<string>("NAME") into g
select new Foo
{
Name = g.Key,
Price=g.Min (x =>x.Field<float>("PRICE"))
}
).ToList();
这将得到以下结果:
chair 6
table 15
plate 4
参考: