2016-07-22 63 views
0

我想要捕获需要添加到SQL表中的列名以插入数据。除LINQ中的关键字问题

Columnspresent - 文件中的所有列( “节点”, “LOGTIME”, “理性”, “ID”, “评论”)名单

existingtablecolumnsPresent - 在现有的表中的所有列的列表在SQL中(“节点”,“值”,“原因”,“ID”,“注释”,“日志时间”)

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(); 

上述代码是不是givin g如果列顺序发生变化,请提供正确的结果。请告知。

+0

阅读:HTTP ://stackoverflow.com/questions/16824749/using-linq-except-not-working-as-i-thought。 –

+0

为什么不在'ToList()'之前使用'OrderBy'? – schlonzo

回答

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使用第二查询..

+0

@ user1046415嗨,请问您有什么反馈吗? –

+0

@ user1046415谢谢 –

+0

nameColT在上述查询中的含义是什么? – user1046415