WPFにて以下の2種類のListを持ちたいと考えています。
- SQLiteより取得した元のデータ
- 1.にて取得したデータをフィルターしたデータ (列はそのまま) => フィルターされた内容をDataGridで表示したい。
現在、SQLiteより取得し、データをList(ReactiveCollection)を使用し格納クラスで保持しています。
(うまい言い方が分からず申し訳ありません。)
C#
1 // 格納クラス1 (元) 2 class Test 3 { 4 public DateTime A { get; set; } 5 public int B { get; set; } 6 public int C { get; set; } 7 public string D { get; set; } 8 public string E { get; set; } 9 } 10 11 12 class MainWindowModel 13 { 14 public ReactiveCollection<Test> data { get; } = new ReactiveCollection<Test>(); 15 16 private SQLiteConnectionStringBuilder config { get; } = new SQLiteConnectionStringBuilder 17 { 18 DataSource = @"c:\temp\Test.db" 19 }; 20 21 public void getTestData() 22 { 23 using (var connection = new SQLiteConnection(config.ToString())) 24 { 25 var sql = @"SELECT A, B, C, D, E FROM 'x'"; 26 27 connection.Open(); 28 var result = connection.Query<Test>(sql).ToList(); 29 result.ForEach(x => data.Add(x)); 30 } 31 } 32 }
上記で作成したListをフィルターしその結果を、別のReactiveCollection(使用する保持クラスはTestとまったく同じ)に格納したいです。
(data に上書きしたくない)
C#
1 // 格納クラス2 (フィルター) 2 class Test2 3 { 4 public DateTime A { get; set; } 5 public int B { get; set; } 6 public int C { get; set; } 7 public string D { get; set; } 8 public string E { get; set; } 9 } 10 11 class MainWindowViewModel 12 { 13 public ReactiveCollection<Test2> test2 { get; } = new ReactiveCollection<Test2>(); 14 15 private MainWindowModel model { get; } = new MainWindowModel(); 16 17 publicMainWindowViewModel() 18 { 19 model.getTestData(); 20 21 // フィルター 22 var list = model.data.Where(x => x.A.Date > DateTime.Today.AddMonths(-2)) 23 .OrderBy(x => x.A); 24 } 25 } 26
単純にフィルターの後に以下のように書いてみましたが、案の定 匿名型から型変換はできませんでした。(そもそも不可能??)
C#
1 list.ToList().ForEach(x => test2.Add(x));
こんなことをする前に、もっと上手いことフィルター等ができそうな気がしますが、、、
基本すら曖昧でうまく説明できず申し訳ないのですが、なにか良い方法があればご教示いただければ幸いです。
回答2件
あなたの回答
tips
プレビュー