【发布时间】:2019-12-20 21:53:35
【问题描述】:
我有一段代码需要处理 DataTable。 DataTable 看起来像这样:
PartnerID | Partner Name | GroupID | Group Name | Description
------------------------------------------------------------------------------------------
1 | First Name | 4 | Group Name1 | Foo
2 | Second Name | 12 | Group Name2 | Bar
3 | Third Name | 7 | Group Name3 | Hello
3 | Third Name | 8 | Group Name4 | Hello World
现在我要完成的是以下 SQL 语句的性能:
SELECT DISTINCT PartnerID, Partner Name
FROM Table1
在 C# 中使用 Linq,预期输出如下所示:
PartnerID | Partner Name |
-------------------------------------
1 | First Name |
2 | Second Name |
3 | Third Name |
我已经看过以下帖子:
发现这对我的情况没有帮助,因为我真正想做的只是获取指定的列,但那里的所有答案都显示了一个解决方案,该解决方案似乎只适用于 where 语句或默认选择所有列。
我当前的代码现在看起来像这样:
static void Main(string[] args)
{
DataTable fullTable = new DataTable();
AddColumns(fullTable, "PartnerID", "Partner Name", "GroupID", "Group Name", "Description");
fullTable.Rows.Add(1, "First Name", 4, "Group Name1", "Foo");
fullTable.Rows.Add(2, "Second Name", 12, "Group Name2", "Bar");
fullTable.Rows.Add(3, "Third Name", 7, "Group Name3", "Hello");
fullTable.Rows.Add(3, "Third Name", 8, "Group Name4", "Hello World");
var selectTwoCols = from arow in fullTable.AsEnumerable()
select arow; //how do i select specific columns from those rows?
foreach (DataRow dataRow in selectTwoCols.Rows)
{
foreach (var item in dataRow.ItemArray)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
}
static void AddColumns(DataTable table, params string[] columnNames)
{
for (int i = 0; i < columnNames.Length; i++)
{
table.Columns.Add(columnNames[i]);
}
}
我也愿意使用不同的类,尽管我仍然很想知道如何使用 DataTables 来解决这个问题
【问题讨论】:
-
为什么不直接删除不需要的列?
-
因为这不会使结果与众不同,并且可能不是这样做的预期方式,从 DataTable 类的“设计”来看
-
首先我不会使用
DataTable,这是一种非常古老的做事方式。 -
在这种情况下,我很高兴知道当前的做事方式如何。虽然我仍然对如何使用数据表解决这个问题感到好奇
-
“当前方式”是使用域对象(类)来表示您的数据。就像
Partner类。