Я столкнулся с библиотекой LinqToExcel и немного поиграл с ней. Кажется, я неправильно понимаю, как работает запрос. Я создал простой лист с информацией о клиенте. Использование LINQPad, я установки мой запрос, как так:Предикат не применяется в запросе LinqToExcel
void Main()
{
string path = @"E:\Documents\LINQPad\LINQPad Queries\LinqToExcel\Customers.xlsx";
var excel = new ExcelQueryFactory(path);
// Mappings and Transforms:
excel.AddMapping<Customer>(c => c.Contact, "Contact Person");
excel.AddMapping<Customer>(c => c.CompanyName, "Company Name");
excel.AddMapping<Customer>(c => c.IsPreferred, "Preferred");
excel.AddTransformation<Customer>(c => c.IsPreferred, cellValue => cellValue == "Yes");
// Query:
var preferrdCompanies = from c in excel.Worksheet<Customer>("Customers")
where c.IsPreferred // this has no effect?
orderby c.CompanyName
select new { c.CompanyName, c.Contact, c.IsPreferred };
// Display:
preferrdCompanies.Dump("Preferred Customers:");
}
// Define other methods and classes here
class Customer
{
public string Contact { get; set; }
public string CompanyName { get; set; }
public bool IsPreferred { get; set; }
}
По какой-то причине, предикат не применяется. Преобразование в true (bool) из текста «Да» работает. Если я пишу:
preferrdCompanies.ToList().Where(c => c.IsPreferred).Dump("Preferred Customers:");
Я получаю отфильтрованный список, как и следовало ожидать. Я искал простую ошибку в моем коде, но не исключает никаких исключений, и я не могу найти ничего явно неправильного, поэтому, я думаю, я просто не понимаю, как работают запросы?
Любой ответ/пояснение будет оценен, спасибо.
При добавлении 'ToList' до' Where', то это, скорее всего, ошибка в LinqToExcel. –
Это может быть; Я добавил ToList(), чтобы изменить набор результатов из ExcelQueryable <> в список <>, чтобы получить отфильтрованные результаты. Он действует так, как будто ExcelQueryable имеет способ принять предикат, но ничего не делает с ним. – Sleette
Возможно; или есть ошибка в синтаксическом анализе, которая не обрабатывает логический столбец должным образом. –