LINQ

时间:2016-07-22 16:05:08

标签: linq linq-to-sql except

我想捕获需要添加到SQL表中的列名,以便插入数据。

Columnspresent - 文件中所有列的列表("节点"," Logtime","原因"," ID& #34;"注释&#34)

existingtablecolumnsPresent - SQL中现有表中所有列的列表(" Node"," Value"," Reason",&# 34; ID""注释"" logTime Description该条&#34)

columnsNotPresent - 需要添加到SQL表中的列的列表(必须得到"值"在输出中但没有得到)..

 List<string> columnsPresent = 
          dt.Columns.Cast<DataColumn>()
         .Select(a => a.ColumnName.ToLower())
         .ToList();

 List<string> existingtablecolumnsPresent = 
          existingtable.Columns.Cast<DataColumn>()
         .Select(a => "[" + a.ColumnName.ToLower() + "]")
         .ToList();

 List<string> columnsNotPresent = 
         columnsPresent.OrderBy(t => t)
        .Except(existingtablecolumnsPresent.OrderBy(t => t))
        .ToList();

如果列的顺序发生变化,上面的代码没有给出正确的结果。请告知。

1 个答案:

答案 0 :(得分:0)

你可以尝试这个(它不需要按......)

List<string> existingtablecolumnsPresentNoSqrBr = new List<string>();
existingtablecolumnsPresent.ForEach(c => {
               c = c.Replace("[", string.Empty); 
               c = c.Replace("]",string.Empty);
               existingtablecolumnsPresentNoSqrBr.Add(c);
               });

List<string> columnsNotPresent = 
            columnsPresent.Except(existingtablecolumnsPresentNoSqrBr)
            .ToList();

实际上,如果您避开.Select(a => "[" + a.ColumnName.ToLower() + "]"),则可以直接在existingtablecolumnsPresent上使用第二个查询。