我遇到了使用LINQ to DataSet检索和过滤数据的强类型DataSet
显示区分大小写的问题。在我的示例项目中,我创建了一个名为 DataSet1 的强类型数据集。它包含一个名为Customers 的单曲。为了实例化和填充,我创建了几行(注意名称上的大小写):DataTable
// Instantiate
DataSet1 ds = new DataSet1();
// Insert data
ds.Customers.AddCustomersRow(1, "Smith", "John");
ds.Customers.AddCustomersRow(2, "SMith", "Jane");
接下来,我可以使用 DataSet 的内置Select
功能轻松获取/过滤:
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
我已经检查了实例化数据集CaseSensitive
的属性以及客户数据表的CaseSensitive
属性——两者都是错误的。我还意识到,在使用该Select
方法时,DataSet
执行过滤和 LINQ 查询正在执行其他操作。
我对这种类型的代码的希望和渴望是用它来对我们编译的 LINQ to SQL查询进行单元测试,这样我就不能真正改变所有当前的查询来使用:
...where c.LastName.StartsWith("sm", StringComparison.CurrentCultureIgnoreCase) select c;
...因为这会更改 SQL 中的查询。感谢大家的任何建议!