【问题标题】:join between two tables with linq to datasets使用 linq 连接两个表到数据集
【发布时间】:2009-08-11 11:28:40
【问题描述】:

我想在两个表之间创建一个连接,结果将包括所有两个表列。 我想在不指定特定列名的情况下执行此操作,只需选择全部,因为我不知道这两个表将包含多少列,也不知道它们的名称。

我只想在两个表之间创建联接,结果将包括两个表列。

我该怎么做? 结果类型应该是什么?

我试过了:

var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
           join
          t2 in ds1.Tables["Table2"].AsEnumerable()
           on t1.Field<string>("TrID") equals t2.Field<string>("TrID")
                select new { t1, t2 };

但我得到一个奇怪的类型,结果我无法做任何事情,我无法将其转换为 dataTable、Dataset 或在 gridview 中呈现。

例如,获取一个包含 [TrID]、[SP]、[SP2] 列的表,而无需专门创建包含这三列的匿名类型:

表 1 三叉戟 阿萨夫1 阿萨夫2 F1 K2 阿萨夫1 D2 H1 F1

表2
三叉戟 SP2 Asaf1 Dor2 阿萨夫1 U1 R1 W1 I1 Y3

【问题讨论】:

    标签: linq join linq-to-dataset


    【解决方案1】:

    没有办法神奇地合并两个表。如果您想要一个新的DataTable,您需要使用适当的列创建一个新的并相应地添加行。或者,您确实可以将匿名类型绑定到控件,但不能使用您当前的两个DataRow 属性的匿名类型。相反,您需要提取所需的字段:

    var res = from t1 in ds1.Tables["Table1"].AsEnumerable()
              let id = t1.Field<string>("TrID")
              join t2 in ds1.Tables["Table2"].AsEnumerable()
                on id equals t2.Field<string>("TrID")
                    select new {
                        TrID = id,
                        SP = t1.Field<string>("SP"),
                        SP2 = t2.Field<string>("SP2")
                    };
    

    然后您可以将res 设置为您的数据源并绑定到TrIDSPSP2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多