Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从数据表中获取除指定列以外的所有行?_C#_Linq_Datatable - Fatal编程技术网

C# 如何从数据表中获取除指定列以外的所有行?

C# 如何从数据表中获取除指定列以外的所有行?,c#,linq,datatable,C#,Linq,Datatable,目前,我在通过选择所有行(但仅选择一些列)从DataTable中获取一些数据时遇到一些问题 更具描述性的是,这里有一个小例子: 样本数据 我所拥有的 因此,我们从GUI中得到的是一个IEnumerable selectedColumns,在那里我们将找到两个元素(FirstName和LastName) 现在我需要一个包含所有行的结果,但只包含上面两列(或任何其他选定列的列表) 到目前为止,我已经在几个一维对象上使用了LINQ,但是这个二维对象让我有点头疼 // The hard-coded wa

目前,我在通过选择所有行(但仅选择一些列)从DataTable中获取一些数据时遇到一些问题

更具描述性的是,这里有一个小例子:

样本数据 我所拥有的 因此,我们从GUI中得到的是一个
IEnumerable selectedColumns
,在那里我们将找到两个元素(FirstName和LastName)

现在我需要一个包含所有行的结果,但只包含上面两列(或任何其他选定列的列表)

到目前为止,我已经在几个一维对象上使用了LINQ,但是这个二维对象让我有点头疼

// The hard-coded way
Table.AsEnumerable().Select(row => new { FirstName = row[1], LastName = row[2] });

// The flexible way
Table.AsEnumerable().Select(row => row ???)

但我现在怎么说,应该使用我的selectedColumns来选择行中的哪些列呢?

您不需要Linq来做这件事:

string[] selectedColumns = new[] { "ID", "LastName" };

DataTable tableWithOnlySelectedColumns =
    new DataView(table).ToTable(false, selectedColumns);

您可以使用以下代码获得类似的输出-

var result = Table.AsEnumerable().Select(row => 
             new { 
                   FirstName = row.ItemArray[Table.Columns["FirstName"].Ordinal], 
                   LastName = row.ItemArray[Table.Columns["LastName"].Ordinal] 
                 });

硬编码解决方案到底出了什么问题?硬编码方式没有什么问题。我只是不需要硬编码,因为我喜欢在运行时通过
IEnumerable
设置想要的列。
var result = Table.AsEnumerable().Select(row => 
             new { 
                   FirstName = row.ItemArray[Table.Columns["FirstName"].Ordinal], 
                   LastName = row.ItemArray[Table.Columns["LastName"].Ordinal] 
                 });