2014/10/31

[C#] ラムダ式での IN 句

ラムダ式で SQL の WHERE IN のようなことをするためには、検索の元となる値を配列にしてしまい、Contains を使用する。
そもそもデータを取得する時点で絞り込んでおくべきではあるが、こんな書き方もできるというメモ。
// 今さら DataTable ではあるが、使用されているケースは多い…はず?
var dt = new DataTable();
dt.Columns.Add("Class", typeof(int));
dt.Columns.Add("Name", typeof(string));
for (var i = 0; i <= 10; i++)
{   
    var dr = dt.NewRow();
    dr["Class"] = i;
    dr["Name"] = "Hoge " + i.ToString() + " 世";
    dt.Rows.Add(dr);
}
for (var i = 11; i <= 20; i++)
{
    var dr = dt.NewRow();
    dr["Class"] = i;
    dr["Name"] = "Gege " + i.ToString() + " 世";
    dt.Rows.Add(dr);
}
// 設定ファイルなどに記載された CSV を仮定。Class が 1 もしくは 3 であるレコードを取得する。
var settings = "1,3";
// string[] に分割後、List に変換。数値型にする。
var list = settings.Split(',').ToList().ConvertAll(x => int.Parse(x));
var ret = dt.AsEnumerable().Where(x => list.Contains((int)x["Class"]));
foreach(var x in ret)
{
    // 出力
    // Hoge 1 世
    // Hoge 3 世
    Console.WriteLine(x["Name"]);
}

2014/10/25

[C#] 文字列の分割時に空白を無視

Split メソッドは色々と便利な使い方ができるが、何も指定しないと分割時に空白も含まれてしまう。これをオプション指定して空白を無視するには、若干書き方が変わってくる。
var s1 = "abc,def,,ghi,";            
var s2 = s1.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
// s2[0] = "abc"
// s2[1] = "def"
// s2[2] = "ghi"
StringSplitOptions 列挙体
http://msdn.microsoft.com/ja-jp/library/system.stringsplitoptions(v=vs.110).aspx

[Google Chrome] 指定したサイトを常にシークレットモードで開く

Incognito-Filter は、指定したサイト(アドレス)を開く際に自動的にシークレットモードで立ち上げてくれる拡張機能である。アドレスの指定は正規表現も使用できるので柔軟な設定が可能。

Incognito-Filter
https://chrome.google.com/webstore/detail/incognito-filter/cifilbmpnkjinlkchohdfcpdkmpngiik

2014/10/02

[ASP.NET] テキストボックスにウォーターマークを表示させる

テキストボックスに対して、入力して欲しい値を予め薄く表示するウォーターマーク。実装方法は様々あるが、HTML5 対応ブラウザが対象であれば、以下のように placeholder タグを追加するだけで驚くほど簡単に実装できる。
なまえ:<asp:textbox id="TextBox1" placeholder="姓" runat="server"></asp:textbox>
 <asp:textbox id="TextBox2" placeholder="名" runat="server"></asp:textbox>
Related Posts Plugin for WordPress, Blogger...