前提
◎勉強のため、DBにある顧客情報を、一覧表示させるアプリを作っています。
◎顧客情報に関する検索条件は60項目以上あり、
検索値があればwhere句を追加していくクエリを書いています。
(Entity framework使用)
◎DBには日付を扱うカラムもありますが、
SQLiteを使用しているため、TEXT型でデータを格納しています。
実現したいこと
①DBにある日付データ(TEXT型)をDateTime型に変換し、where句で比較したいのですが、
クエリ内でDateTime.Parse(日付データ)をしようとすると、エラーが発生します。
②DBにある日付データ(TEXT型)が、DateTime型に変換できるものなのかも、
どこかで検証せねばなりません。
そもそも日付データの扱い方が間違っているのでしょうか。
どうか宜しくお願い致します。
###環境
◎.net Frame Work 4.61
◎C#
◎Entity framework 6.2
◎SQLite3
◎visual studio Community 2017
◎windows7 64bit
エラーメッセージ
System.NotSupportedException: 'メソッド 'System.DateTime Parse(System.String)' は LINQ to Entities では認識されないため、ストア式に変換できません。'
ソースコード
C#
1※Entityモデル 2public partial class MT_Customers 3{ 4 [Key] 5 public int? 顧客ID { get; set; } 6 7 public string 入会日時 { get; set; } 8}
C#
1//検索項目を定義 2public class MyFilters 3{ 4 public int? 顧客ID { get; set; } 5 public DateTime? 入会日時 { get; set; } 6} 7 8//検索値を指定 (サンプル) 9MyFilters filters = new MyFilters(); 10filters.顧客ID = 3451; 11filters.入会日時 = DateTime.Now.AddYears(1); 12 13//DBから顧客情報を取得する 14using (var context = new EntitySQLite()) 15{ 16 var list = 17 (from cus in context.MT_Customers 18 where cus.世帯主フラグ == 1 19 orderby cus.顧客名かな 20 select cus 21 ).AsQueryable(); 22 23 if (filters.顧客ID.HasValue) list = list.Where(x => x.顧客ID == filters.顧客ID); 24 25 if (filters.入会日時.HasValue) list = list.Where(x => DateTime.Parse(x.入会日時) >= filters.入会日時); 26 //ここでエラー発生 27 28 DataGrid1.ItemSource = list.ToList<Customers>(); 29} 30

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/08 04:36
2019/02/08 04:48
2019/02/08 05:01
2019/02/08 05:48
2019/02/08 11:53