LINQ、ラムダ式 便利技特集です。
よく忘れるのでメモしておきます。
条件なしで更新
dtTest.AsEnumerable().Select(r => r["colName"] = false).ToList();
条件ありで更新
dtTest.AsEnumerable().Where(r => r.Field<string>("colName") == "a" || r.Field<string>("colName") == "b")
.Select(r => r["updateColName"] = false)
.ToList();
なぜToList()が必要なのかはわかりませんが、
ないと動きませんorz
Dictionary<string, TypeOfField1> newDictionaly = oldDictionaly.ToDictionary(d => d.Key, d => d.Value.field1);
Directory.GetFiles("C:\file", "*.txt", SearchOption.TopDirectoryOnly).OrderByDescending(f => File.GetLastWriteTime(f)).FirstOrDefault();
更新日時以外は、
となります。
DataGridViewRow target = dataGridView1.Rows.Cast<DataGridViewRow>().Where(r => (string)r.Cells["colName"].Value == "条件").SingleOrDefault();
LINQでOrderByをかけると、なぜかNullが最初にきます。
DBの「ORDER BY」ルックに、最後に持っていきたい場合は下記のように指定します。
文字列の場合
List<string> list1 = new List<string>() { null, "文字列1", "文字列2", "文字列3" };
List<string> sortedStringList = list1.OrderByDescending(s => !string.IsNullOrEmpty(s)).ThenBy(s => s).ToList();
数値の場合
List<int?> list2 = new List<int?>() { null, 1, 2, 3 };
List<int?> sortedIntList = list2.OrderBy(i => i ?? int.MaxValue).ToList();
日付の場合
List<DateTime?> list3 = new List<DateTime?>() { null, DateTime.Now.AddDays(-1), DateTime.Now, DateTime.Now.AddDays(1) };
List<DateTime?> sortedDateTimeList = list3.OrderBy(d => d ?? DateTime.MaxValue).ToList();
Assembly assm = Assembly.GetExecutingAssembly();
var types = assm.GetTypes()
.Where(p => p.Namespace == "対象の名前空間")
.OrderBy(o => o.Name)
.Select(s => s);
他に思いついたら随時更新します。