我对您想要的最终结果感到困惑。一个可能会指导您但不完全是您想要的想法是您可以将 DataTable 更改为匿名投影,然后从中获得您想要的东西。您可以从 DataTable 中执行“选择”,该数据表进入您要选择的“什么”的扩展方法。如果我要在“新”之后执行一个没有任何类或容器对象的新 {},那么我的范围将仅限于一个方法。当您想以一种方法为特定用途塑造某些东西以针对特定视图量身定制时,这是一个很好的优势。
static void Main(string[] args)
{
DataTable d = new DataTable();
d.Columns.Add("ItemName", typeof(string));
d.Columns.Add("MinValue", typeof(float));
d.Columns.Add("MaxValue", typeof(float));
d.Rows.Add("Widget1", 0.1, 0.2);
d.Rows.Add("Widget2", 0.2, 0.4);
d.Rows.Add("Widget3", 0.1, 0.2);
var dataTable = d.AsEnumerable();
//What do you want to select? The new {} without an indicator means anonymous type projection. This will exist only in
// the scope listed.
var data = dataTable.Select(x => new { ItemName = x[0], MinValue = x[1], MaxValue = x[2] }).ToList();
//My 'data' type is now well typed for it's properties in the scope it's in.
var joined = String.Join(", ", data.Select(x => x.ItemName).ToList());
Console.WriteLine(joined);
Console.WriteLine($"{data.Count}");
Console.ReadLine();
}
编辑 1-26-18
奇怪我以为我昨天更新了代码。要获得一个可以将前端绑定到的可重用对象,您只需像这样创建一个 POCO:
public class Foo
{
public string Bar { get; set; }
public string MinAndMax { get; set; }
}
虽然您可以制作另一个 DataTable,但坦率地说,DataTable 就像 WinForms。他们完成了工作,但他们过时并且不友好地使用 Linq 就像一个结构良好的 POCO 一样容易。如果你开始使用 Linq,它会更好地处理格式良好的对象,并且它们很容易创建。
var data = dataTable.Select(x => new Foo { Bar = x[0].ToString(), MinAndMax = $"{x[1]} {x[2]}" }).ToList();
//My 'data' type is now well typed for 'Foo' class and it's properties in the scope it's in.
var joined = String.Join(", ", data.Select(x => $"{x.Bar} {x.MinAndMax}").ToList());