Dưới đây là một giải pháp chung chung mà không Phản ánh trên các thuộc tính. Có phương thức tiện ích mở rộng như bên dưới
public static DataTable ConvertToDataTable<TSource>(this IEnumerable<TSource>
records, params Expression<Func<TSource, object>>[] columns)
{
var firstRecord = records.First();
if (firstRecord == null)
return null;
DataTable table = new DataTable();
List<Func<TSource, object>> functions = new List<Func<TSource, object>>();
foreach (var col in columns)
{
DataColumn column = new DataColumn();
column.Caption = (col.Body as MemberExpression).Member.Name;
var function = col.Compile();
column.DataType = function(firstRecord).GetType();
functions.Add(function);
table.Columns.Add(column);
}
foreach (var record in records)
{
DataRow row = table.NewRow();
int i = 0;
foreach (var function in functions)
{
row[i++] = function((record));
}
table.Rows.Add(row);
}
return table;
}
Và gọi cùng sử dụng thông số nơi tên cột theo thứ tự bạn muốn.
var table = records.ConvertToDataTable(
item => item.Title,
item => item.Street,
item => item.City
);
Bạn đang làm gì mà bạn cần một DataTable như là kết quả? – dwerner
Tôi đang cố gắng xuất sang CSV và đã có phương pháp có thể xuất DataTable/Đặt thành CSV. – TruMan1
Tôi nghĩ rằng bạn đang tìm kiếm một ngôn ngữ lập trình động trong một (chủ yếu) được đánh máy tĩnh. Nếu bạn đang rất gắn bó với những DataTable để csv xuất khẩu thói quen, sau đó tôi sợ con đường của bạn có thể là một tread của chỉ có bạn. Các đối tượng ẩn danh là một tính năng ngôn ngữ khá mới, và DataRow/DataTable/DataSet không được thiết kế với chúng. – dwerner