LINQ to DataSetを使用してデータを取得およびフィルター処理する、厳密に型指定されたDataSet
大文字と小文字の区別に関する問題が発生しています。サンプル プロジェクトでは、DataSet1 という厳密に型指定された DataSet を作成しました。これには、 Customersという単一の名前が含まれています。インスタンス化して入力するために、いくつかの行を作成します (名前の大文字と小文字に注意してください)。DataTable
// Instantiate
DataSet1 ds = new DataSet1();
// Insert data
ds.Customers.AddCustomersRow(1, "Smith", "John");
ds.Customers.AddCustomersRow(2, "SMith", "Jane");
Select
次に、DataSet の組み込み機能を使用して、簡単にフェッチ/フィルター処理できます。
var res1 = ds.Customers.Select("LastName LIKE 'sm%'");
Console.WriteLine("DataSet Select: {0}", res1.Length);
DataSet Select: 2
問題は、LINQ to DataSet を使用して同じ操作を実行しようとしたときに始まります。
var res2 = from c in ds.Customers where c.LastName.StartsWith("sm") select c;
Console.WriteLine("LINQ to DataSet: {0}", res2.Count());
LINQ to DataSet: 0
インスタンス化された DataSet のCaseSensitive
プロパティと Customer DataTable のCaseSensitive
プロパティを既に確認しましたが、どちらも false です。Select
また、この方法論を使用するDataSet
と、 がフィルタリングを実行し、LINQ クエリが別のことを行っていることにも気付きました。
このタイプのコードに対する私の希望と願望は、それを使用してコンパイル済みの LINQ to SQLクエリを単体テストすることでした。そのため、現在使用しているすべてのクエリを実際に変更することはできません。
...where c.LastName.StartsWith("sm", StringComparison.CurrentCultureIgnoreCase) select c;
...それはSQLのクエリを変更します。提案をありがとう!