【问题标题】:How to join two tables using c# 4.0?如何使用 c# 4.0 连接两个表?
【发布时间】:2014-04-14 14:17:48
【问题描述】:

我和LINQ join two DataTables有同样的问题 但我的数据表是在运行时制作的,比如

DataTable dtTML = (DataTable)JsonConvert.DeserializeObject(Convert.ToString(data.Json.Args[0]["TML"]), (typeof(DataTable)));

某人给出的解决方案很好,但我在 datarows2 上遇到错误

select dtResult.LoadDataRow(new object[]
{
  dataRows2.Field<int>("stock") // here is error : does not exist in current context
}

虽然 dataRows1.Field(s) 没问题

【问题讨论】:

  • 显然对于给定的数据行没有具有该名称的列值。不确定您还希望听到什么,或者这与加入两个表有什么关系。
  • 同意,您的数据表有"stcok" 列吗?
  • 是的,我是说我的数据表在运行时

标签: c# linq c#-4.0 datatable


【解决方案1】:

我看不出这种方法有什么问题:

DataTable dt1 = new DataTable();
dt1.Columns.Add("PK", typeof(int));
dt1.Columns.Add("Data1", typeof(int));

DataTable dt2 = new DataTable();
dt2.Columns.Add("FK", typeof(int));
dt2.Columns.Add("Data2", typeof(int));

dt2.Rows.Add(1, 5000);
dt1.Rows.Add(1, 1000);

var Result = (from r1 in dt1.AsEnumerable()
              join r2 in dt2.AsEnumerable()
              on r1["PK"] equals r2["FK"]
              select new
              {
                  A = r1.Field<int>("Data1"),
                  B = r2.Field<int>("Data2"),
                  //  choose more columns if any
              }).ToList();

你可以用它做任何你想做的事。如果您需要结果为 Datatable ,只需使用此方法 [ ListToDataTable ] 将 List 转换为 DataTable:

public static DataTable ListToDataTable<T>(List<T> items)
{

    System.ComponentModel.PropertyDescriptorCollection properties =
    System.ComponentModel.TypeDescriptor.GetProperties(typeof(T));
    DataTable table = new DataTable();
    foreach (System.ComponentModel.PropertyDescriptor prop in properties)
        table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
    foreach (T item in items)
    {
        DataRow row = table.NewRow();
        foreach (System.ComponentModel.PropertyDescriptor prop in properties)
            row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
        table.Rows.Add(row);
    }
    return table;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-09
    • 2018-04-20
    • 2013-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    相关资源
    最近更新 更多