ID Name Value
......................
1 aa 123
2 bb 123
3 cd 123
想要删除列"值"它使用linq
从Dataset获得所有行值等于123答案 0 :(得分:1)
如果要在所有值相同的情况下删除整个列,请使用Enumerable.All
,例如:
foreach(DataTable dt in ds.Tables)
{
if(dt.Rows.Count > 0 && dt.Columns.Contains("Value") && dt.Columns["Value"].DataType == typeof(int))
{
int firstValue = dt.Rows[0].Field<int>("Value");
if(dt.AsEnumerable().Skip(1).All(r => r.Field<int>("Value") == firstValue))
{
dt.Columns.Remove("Value");
}
}
}
更新:&#34;想要找到并删除该列,该列中的所有值都相同。&#34;
然后你只需要概括上面的代码:
foreach (DataTable dt in ds.Tables)
{
List<DataColumn> columnsToDelete = new List<DataColumn>();
foreach (DataColumn col in dt.Columns)
{
object first = dt.Rows[0][col];
if (dt.AsEnumerable().Skip(1).All(r => r[col].Equals(first)))
{
columnsToDelete.Add(col);
}
}
foreach (DataColumn colToRemove in columnsToDelete)
dt.Columns.Remove(colToRemove);
}
答案 1 :(得分:0)
此处返回datarow列表
ds.Tables["tableName"].AsEnumerable().Where(g => g.Field<Int32>("Value") != 123).ToList<DataRow>();
答案 2 :(得分:0)
使用SLaks https://stackoverflow.com/a/1766950/848286
给出的解决方案foreach (var column in ds.Tables[0].Columns.Cast<DataColumn>().ToArray())
{
if (ds.Tables[0].AsEnumerable().All(dr => dr.IsNull(column)))
{
ds.Tables[0].Columns.Remove(column);
}
}