【问题标题】:Linq to Compare two datatables and Filter dataLinq 比较两个数据表和过滤数据
【发布时间】:2015-10-21 09:55:39
【问题描述】:

我有两个数据表,

     Id     Name
      1     Alex
      2     Hiro

我的第二个数据表是

      Field   |  1   |  1_Value  |  2     |  2_Value
      Salary  | 123.4|  Good     |  245   |  Bad
      CTC     | 25.4 |  Bad      |  300   |  good

第一个表 ID 值 1、2 是第二个表的列。 我想使用 Id 比较两个表 - 使用 linq 的列关系,我预期的过滤输出应该看起来像

      [{
        "Id" : 1 , "Name": "Alex",
         "data" : [123.4, 25.4] ,"values":["Good" ,"Bad"]},
        {
        "Id" : 2 , "Name": "Hiro",
         "data" : [245, 300] ,"values":["Bad","Good" ]}
        ]

我的代码尝试使用 foreach 循环,例如

        if (ds.Tables[1].Rows.Count > 0)
                {
                    var comparisonDetail = (from DataRow dataRow in ds.Tables[1].Rows
                                            select new cls.MyBaseClass()
                                            {
                                                ID = Convert.ToInt64(dataRow["ID"]),
                                                Name= Convert.ToString(dataRow["Name"])  
                                            }

                                            ).ToList();
                    foreach (var vId  in  comparisonDetail)
                    {
                       foreach(var vRow in ds.Tables[2].Rows)
                       {
            vId.Data = vRow.value.

                       } 
                    }

如何使用 c# linq 实现这一点? 帮助将不胜感激

【问题讨论】:

  • 为什么要这样塑造第二张数据表?您应该首先尝试创建一个更加规范化的数据结构。
  • DataSets 和 DatTables 支持关系,这意味着你不需要做任何特别的事情来连接两个相关的表。第二张桌子虽然看起来是旋转的,这使得它基本上无法使用。如果它的原始来源是一些带有 Salary、CTC 字段的“EmployeeData”表,只需加载 this 表,并在它们之间创建外键关系

标签: c# linq asp.net-web-api datatable


【解决方案1】:

你想使用 join (join clause (C# Reference))

using(var c = DataBaseConnection())
{
 var data=from r in c.firstTable
          join st in c.SecondTable on r.Id equals st.FieldId
          select new
                 { 
                   // create return object
                 };
}

【讨论】:

  • 这可能是不可能的。 OP 的第二个表是非规范化的(看起来像一个透视表,或者更确切地说是两个),每个员工有两个 列,这意味着没有固定字段可以加入
  • 当我尝试在两个表之间进行连接时,它会抛出一个错误“找不到 sourcetype System.Data.datatble 的实现查询模式。'Join' not found”
  • 你能发布你的表结构吗(没有数据,只有结构)?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-18
  • 2015-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-28
相关资源
最近更新 更多