0

私はこのようなデータテーブルを持っています(例):

  
CurrentText CurrentValue OldText OldValue  
--------------------------------------------  
テスト 1 1 古いテスト 1 1   
テスト 2 2 古いテスト 2 2

ユニオンをしたいので、結果は次のようになります

テキスト値 IsCurrent   
Test1 1 真   
Test2 2 真   
OldTest1 1 偽
OldTest2 2 偽   

私が今これを行う方法:

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

私が持っている唯一の質問: より良い/より速いアプローチはありますか?

4

1 に答える 1

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);
    }
于 2013-03-19T02:08:32.913 に答える