C# 检查IEnumerable上的字符串

C# 检查IEnumerable上的字符串,c#,.net,linq,C#,.net,Linq,我有一个此类ColumnInfo的IEnumerable namespace MyCompany { public class ColumnInfo { public int Id { get; set; } public string Description { get; set; } public int DisplayOrder { get; set; } public string Colum

我有一个此类ColumnInfo的IEnumerable

namespace MyCompany
{
    public class ColumnInfo
    {
        public int Id { get; set; }        
        public string Description { get; set; }
        public int DisplayOrder { get; set; }
        public string ColumnName { get; set; }       
    }
}
在这个类中,我有一个ColumnName属性,它显示字符串列名

我已经用一些列填充了数据表


我需要从数据表中删除不在具有属性ColumnName的IEnumerable中的列。在我的datatable中,我只需要ColumnName属性中列出的列。

有几种方法可以对此列进行蒙皮-这里有一个选项:

List<DataColumn> columnsToRemove = new List<DataColumn>();
foreach (DataColumn dc in dt.Columns)
{
    if (list.Any(ci => ci.ColumnName == dc.ColumnName))
    {
        continue;
    }

    columnsToRemove.Add(dc);
}

foreach (DataColumn dc in columnsToRemove)
{
    dt.Columns.Remove(dc);
}
List columnsToRemove=new List();
foreach(数据列dc在dt.列中)
{
if(list.Any(ci=>ci.ColumnName==dc.ColumnName))
{
继续;
}
columnsToRemove.Add(dc);
}
foreach(columnsToRemove中的数据列dc)
{
dt.列。移除(dc);
}

有几种方法可以对其进行蒙皮-这里有一个选项:

List<DataColumn> columnsToRemove = new List<DataColumn>();
foreach (DataColumn dc in dt.Columns)
{
    if (list.Any(ci => ci.ColumnName == dc.ColumnName))
    {
        continue;
    }

    columnsToRemove.Add(dc);
}

foreach (DataColumn dc in columnsToRemove)
{
    dt.Columns.Remove(dc);
}
List columnsToRemove=new List();
foreach(数据列dc在dt.列中)
{
if(list.Any(ci=>ci.ColumnName==dc.ColumnName))
{
继续;
}
columnsToRemove.Add(dc);
}
foreach(columnsToRemove中的数据列dc)
{
dt.列。移除(dc);
}

您可以使用此linq查询:

var columnsToRemove = table.Columns.Cast<DataColumn>()
    .Where(col => !columnInfos.Any(ci => ci.ColumnName == col.ColumnName))
    .ToList();

foreach(DataColumn col in columnsToRemove)
    table.Columns.Remove(col);
var columnsToRemove=table.Columns.Cast()
.Where(col=>!columnInfos.Any(ci=>ci.ColumnName==col.ColumnName))
.ToList();
foreach(columnsToRemove中的DataColumn列)
表.列.删除(列);

您可以使用此linq查询:

var columnsToRemove = table.Columns.Cast<DataColumn>()
    .Where(col => !columnInfos.Any(ci => ci.ColumnName == col.ColumnName))
    .ToList();

foreach(DataColumn col in columnsToRemove)
    table.Columns.Remove(col);
var columnsToRemove=table.Columns.Cast()
.Where(col=>!columnInfos.Any(ci=>ci.ColumnName==col.ColumnName))
.ToList();
foreach(columnsToRemove中的DataColumn列)
表.列.删除(列);

list.Any(ci=>ci.ColumnName==dc.ColumnName)
切换到使用cleaner Any样式,并在您评论时留下了Neo的要点,Eren。我相信我必须从下到上计数,因为只要我删除一项,foreach就会给我一个错误或
list.Any(ci=>ci.ColumnName==dc.ColumnName)
。切换到使用cleaner Any样式,并在您评论时留下Neo分数,Eren。我相信我必须从下到上计数,因为一旦我删除一个项目,foreach会给我一个错误发布更多代码。也许我们可以为您找到linq soultion!?请发布更多代码,也许我们可以为您找到一个linq解决方案!?