更好的linq联盟

时间:2013-03-19 01:29:34

标签: c# asp.net linq c#-4.0

我有一个这样的数据表(例子):

  
CurrentText  CurrentValue  OldText  OldValue  
--------------------------------------------  
Test1              1       OldTest1     1   
Test2              2       OldTest2     2

我想做一个联盟,所以结果看起来像这个

Text  Value  IsCurrent   
Test1   1       true   
Test2   2       true   
OldTest1 1      false
OldTest2 2      false   

我现在如何做到这一点:

 var lst = dt.AsEnumerable().Select(x => new MyClass
            {
                 Text = x.Field<string>("CurrentText"), 
                 Value = x.Field<string>("CurrentValue"),  
                 IsCurrent=true
            })
             .Union(dt.AsEnumerable().Select(x => new MyClass
             {
                 Text = x.Field<string>("OldText"), 
                 Value = x.Field<string>("OldValue"),  
                 IsCurrent=false
             })
             ).Distinct().ToList();    

我唯一的问题是:有更好/更快的方法吗?

1 个答案:

答案 0 :(得分:0)

不知道你需要完成什么,但是为了代码可读性,也许创建一个具体的IEnuerable类会帮助别人理解和扩展它?

   private static IEnumerable<Tuple<String,String>> GetPairs(ref DataTable dtr)
    {
      var CurrentPairs = dtr.AsEnumerable().Select(t => Tuple.Create
                                                  (
                                                    t.Field<String>("CurrentText"),
                                                    t.Field<String>("CurrentValue")
                                                  ));
      var NewPairs = dtr.AsEnumerable().Select(t => Tuple.Create
                                                  (
                                                    t.Field<String>("OldText"),
                                                    t.Field<String>("OldValue")
                                                  ));

      return CurrentPairs.Union(NewPairs);
    }