【发布时间】:2020-10-13 23:49:54
【问题描述】:
我需要检查从 Sybase 查询返回的数据,以检查与将显示给定数据集的电子表格相对应的第一列。我可以在我的数据集中正确获取数据,但是当我尝试删除分组列时问题就来了。
我的样本数据如下:
public static DataTable JustDataTableWithSheetColumn()
{
var sample = new DataTable();
sample.Columns.Add("SomethingSheet", typeof(string));
sample.Columns.Add("Column1", typeof(string));
sample.Columns.Add("Column2", typeof(string));
sample.Rows.Add("1", "Somestuff", "this other stuff");
sample.Rows.Add("1", "Fluffy", "this stuff");
sample.Rows.Add("2", "ToolShed", "this other stf");
sample.Rows.Add("2", "FudgeCycles", "this oer stuff");
sample.Rows.Add("2", "Crap", "thr stuff");
sample.Rows.Add("2", "stuff and stuff", "thiuff");
sample.Rows.Add("2", "test crap", "this stuff");
sample.Rows.Add("2", "dungheap", "this othuff");
sample.Rows.Add("3", "people eater", "this other stf");
sample.Rows.Add("3", "no purple people", "ths oth stff");
return sample;
}
以下正确分组并将它们应用于数据表:
var thing = DataTableExamples.JustDataTableWithSheetColumn();
if (thing.Columns[0].ColumnName.Contains("Sheet"))
{
var test = from t in thing.AsEnumerable()
group t by t.ItemArray[0]
into g
select g.ToList().CopyToDataTable();
}
我尝试不使用 .CopyToDataTable() 来仅拥有 DataRows 的集合,并尝试使用 Skip(1) 查询那些,但我认为我的操作顺序不正确,或者我在那个星云中,我有时会迷失在其中IEnumerable 与 IQueryable 以及所有这些变体。
像这样:
datarow.ItemArray.Skip(1).ToArray();
我也尝试循环遍历数据表集合并使用 dt.RemoveAt(0) 但我无法引用操纵的数据表(或这样做不正确)。
foreach (var dt in test)
{
dt.Columns.RemoveAt(0);
}
最重要的是,从数据库返回的数据的第一列在我将它们转换为数据表以便以后添加到我从该 API 返回的数据集中后,就不需要显示或使用它们。
因此,我正在寻找一种优雅的方式,以尽可能少的装箱和拆箱来获得我需要的东西。这部分必须在将其添加到最终数据集之前完成,因为这些奇怪的存储过程中的每一个都可能返回不同的数据表结构,因此我不能简单地从最终数据集中删除所有第一列。
感谢您的帮助。
【问题讨论】:
-
你想要没有第一列的相同数据表吗?
-
@Sajid 那将是理想的。我在淋浴时想到我可能必须在填充数据表之前删除列,但还没有尝试过。我还需要保持相同的基本结构,即每列的数据类型以及列的名称。
-
@Sajid 需要明确的是,在这种情况下,我需要同一张表 3 次,而不是第一列。
-
我以为我理解你,直到我读到最后一段。您的问题标题说 “如何删除数据表 C# 集合中所有数据表中的第一列” 并且您的最终段落说 “我不能简单地从末尾删除所有第一列数据集” - “数据表的集合”是“最终数据集”的子集吗?这个保存“数据表集合”的变量在哪里?
-
@CaiusJard 道歉...这个数据表集合将被添加到数据集以传输到调用 API,该数据集可能有其他数据表没有第一个烦人的列。
标签: c# linq datatables dataset .net-4.7.2