У меня проблема со строго типизированным DataSet
, показывающим чувствительность к регистру при использовании LINQ to DataSet для извлечения и фильтрации данных.В моем примере проекта я создал строго типизированный DataSet с именем DataSet1.Он содержит один 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
экземпляра DataSet, а также таблицу данных клиента.CaseSensitive
свойство - оба ложные.Я также понимаю, что при использовании методологии Select
DataSet
выполняет фильтрацию, а запрос LINQ делает что-то еще.
Я надеялся и хотел, чтобы этот тип кода использовал его для модульного тестирования.наши скомпилированные запросы LINQ to SQL , поэтому я не могу изменить все текущие запросы для использования:
...where c.LastName.StartsWith("sm", StringComparison.CurrentCultureIgnoreCase) select c;
..., поскольку это изменяет запрос в SQL.Спасибо всем за любые предложения!