【问题标题】:Still include rows where no matching values found仍然包括未找到匹配值的行
【发布时间】:2021-11-25 12:20:20
【问题描述】:

我有 2 张表,其中一张有列:

  • 物品编号
  • 号码
  • 标题
  • 创建日期
  • 最后修改日期

还有一个有柱子的:

  • 物品编号
  • 标题
  • 物品标题

我要做的是创建一个新的数据表,它克隆第一个添加了“功能”列的数据表,该列的值将来自第二个数据表的 ItemTitle 列。

我是这样做的:

DataTable test = dtFinal.Clone();
test.Columns.Add("Function");

foreach (DataRow row in dtFinal.Rows)
{
    DataRow[] FunctionData = customPropertiesTable.Select(string.Format("ItemId='{0}' AND Title ='Function'", Convert.ToString(row["ItemId"])));

    if (FunctionData != null && FunctionData.Length > 0)
    {
        string detail = FunctionData[0]["ItemTitle"].ToString();
        var lst = row.ItemArray.ToList();
        lst.Add(detail);
        test.Rows.Add(lst.ToArray());

    }

}

现在这确实有效,但这意味着新表将只显示满足该条件的行,我想做的是让新表仍然包含不满足条件的行,所以我可能会以这样的方式结束:

如果不满足条件,该行的函数值可能为空。我如何更新我为此所做的工作?

【问题讨论】:

  • 我的问题有什么不清楚的地方吗?只是想知道是否需要改进才能获得人们的互动
  • 您的问题信息太多,大部分与问题本身无关。看来您只是不知道如何正确地从数据库中获取数据。我建议您从创建一些简单的数据库并从其表中获取行开始。然后尝试执行更复杂的查询并获得结果。当你获得足够的经验时,你可以回到你的问题。
  • 编写正确的 else 块似乎更成问题。如果满足条件,则执行此操作,否则执行此操作。
  • 我一直认为它与此有关,但我不完全确定如何正确编写它,所以它可以满足我的需求
  • 你有什么建议@Steve?

标签: c# datatable


【解决方案1】:

我设法解决了这个问题,它只需要:

foreach (DataRow row in dtFinal.Rows)
{
    DataRow[] FunctionData = customPropertiesTable.Select(string.Format("ItemId='{0}' AND Title ='Function'", Convert.ToString(row["ItemId"])));

if (FunctionData != null && FunctionData.Length > 0)
{
    string detail = FunctionData[0]["ItemTitle"].ToString();
    var lst = row.ItemArray.ToList();
    lst.Add(detail);
    test.Rows.Add(lst.ToArray());

}   else {
        string detail = "";
        var lst = row.ItemArray.ToList();
        lst.Add(detail);
        test.Rows.Add(lst.ToArray());
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 2014-06-17
    • 2021-05-11
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多