我正在尝试获取除DataGridView
之外的所有列名称的列表。
以下内容返回所有列:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name);
我尝试使用Except
删除返回值的最后一列:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name)
.Except((datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name));
我收到IEnumerable<string>
不包含Except
定义的错误。
如何实现它?
答案 0 :(得分:2)
您可以在taking列n-1
列中排除最后一列:
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Take(datagridview.Columns.Count-1)
.Select(c => c.Name);
答案 1 :(得分:1)
Except
需要一个集合作为输入参数。这是一个设置操作:set1减去set2。所以技术上,它应该是
var lastColumn = datagridview.Columns.GetLastColumn(DataGridViewElementStates.Visible, DataGridViewElementStates.Visible).Name;
var columnsList = datagridview.Columns
.Cast<DataGridViewColumn>()
.Select(c => c.Name)
.Except(new[] { lastColumn });
但是,当然,正如已经回答的那样,使用Take(n-1)
要容易得多,其中n
是列数。
答案 2 :(得分:1)
获取DataGridView的所有列名称列表,除了最后一个=
先取datagridview.Columns.Count - 1
列
由于Columns
有一个索引器并且只实现IEnumerable
(非泛型),我会在这里使用Enumerable.Range
var names = Enumerable.Range(0, datagridview.Columns.Count - 1)
.Select(idx => datagridview.Columns[idx].Name);