2012/08/30

【雑記】本日の箇条書き

1.単体テストでのCollection要素の比較方法

 VisualStudioの単体テスト機能を使ってCollection要素を比較する方法です。って言っても「CollectionAssert.AreEqual メソッド(http://msdn.microsoft.com/ja-jp/library/ms243763(v=vs.100))」で一発です。Collection要素を比較するってこと事態まれではあると思いますが、たまたま使ったので…。
 以下、しょうもないサンプルです。
[TestMethod()]
public void MyMethodTest()
{
    MyClass target = new MyClass();
    var expected = new Collection<string> { "Tanaka", "Suzuki", "Yamada" };
    Collection<string> actual;
    actual = target.MyMethod();
    
    //デフォルトのAssert.AreEqualだとこけます
    //Assert.AreEqual(expected, actual);
    
    CollectionAssert.AreEqual(expected, actual);
 
    //Assert.Inconclusive("このテストメソッドの正確性を確認します。");
}


2.LINQでテーブルを多重結合する際の悩み

 LINQでちょこちょこテーブルを多重に結合する訳なんですが、これが下記のコードのように多重化すればするほどややこしくなっていかんって話。
var myQuery = from p in 
        (from p in
            (from p in elements1
             join g in elements2
             on p.ACd equals g.ACd
             select new { p, g })
         join g in elements3    
         on p.p.BCd equals g.BCd
         select new { p, g })
    join g in elements4
    on p.p.p.CCd equals g.CCd
    select new
    {
        elements1 = p.p.p,
        elements2 = p.p.g,
        elements3 = p.g,
        elements4 = g
    };
見ての通り、pとgのオンパレードです。とりあえず最終的にテーブル名に戻していますが、何かもうちょっとスマートにならんかなぁって感じです。かといっていちいちSELECT句で名前付けたり、LINQを小分けする気にもならないし…。
pagetop