LinqToExcel: Как исключить определенные строки?
Я боролся с этим в течение нескольких дней, и я в тупике. Я надеюсь, что кто-то может предложить альтернативное предложение. По сути, я читаю данные из Excel, используя LinqToExcel. Но я хочу исключить все строки с "рейтингом" из "NR". Вот образец моих данных:
CompanyName Rating SalesMan
Apple 2 Steve
Google NR Steve
Microsoft 3 John
Dell 1 Steve
Pepsi 3 John
Я просто хочу найти все компании, которые принадлежат Стиву, но не имеют рейтинга "NR". Мой окончательный список должен быть:
CompanyName SalesMan
Apple Steve
Dell Steve
Я пробовал следующий код, но он не работает:
1)
var masterList = masterDataXL.Worksheet("data_all").Where(d => !d["Rating"].Equals("NR"));
2)
var masterList = masterDataXL.Worksheet("data_all")
.Where(m =>
!m["Rating"].Equals("NR")
&&
m["SalesMan"].ToString().Contains(resAnLastName)) // check for last name
.Select(m => new ResAnTicksDataClass
{
Company = m["CompanyName"],
Rating = m["Rating"],
Seller = m["SalesMan"]
}).AsEnumerable();
3) Создал свойство для рейтинга и сделал следующее:
var masterList = masterDataXL.Worksheet("data_all")
.Where(m =>
m["Analyst"].ToString().Contains(resAnLastName)) // check for last name
.Select(m => new ResAnTicksDataClass
{
Company = m["CompanyName"],
Rating = m["Rating"],
Seller = m["SalesMan"]
}).AsEnumerable();
var dataList = (from m in masterList
where m.Rating != "NR"
select new ResAnTicksDataClass
{
ResAnName = m.ResAnName,
DescrTick = m.DescrTick
}).AsEnumerable();
Я открыт для любых других предложений, которые могут у вас возникнуть, потому что я полностью в тупике. Огромное спасибо заранее.
2 ответа
Я предлагаю вам выбрать столбец "Рейтинг" в файле Excel, выполнить поиск и заменить выбор (измените "NR" на "0"), а затем отфильтровать. Должно помочь использование одного типа данных.
Как сказал Фог, преобразуя файлы Excel в таблицу, в этой таблице необходимо указать тип каждого столбца. Для этого он будет смотреть только 10 первых строк вашего файла Excel. Таким образом, если ваш файл не имеет значения 'NR' в первых 10 строках, он установит тип столбца в INT
и, следовательно, не удалось преобразовать значение "NR". Простой способ исправить это - добавить строку в ваш файл Excel, непосредственно перед первой строкой данных, с данными, используя тип данных, который вы хотите использовать.
Например, если в столбце используются текстовые значения, а иногда в тексте используется более 255 символов, убедитесь, что первые 10 строк содержат как минимум 1 текстовое значение, используя 256 символов. Иначе, как только он создаст таблицу, столбец будет установлен в VARCHAR(255)
вместо VARCHAR(MAX)
а затем сбой при преобразовании текстов длиннее 255 символов.
Вывод: всегда убедитесь, что первые 10 строк используют правильный тип и размер, чтобы соответствовать всем строкам вашего файла Excel!
В первом примере вы должны изменить это:
d => !d["Rating"].Equals("NR")
к этому:
d => d["Rating"] != "NR"
Это также может быть написано более чистым способом:
var masterList =
from d in masterDataXL.Worksheet("data_all")
where d["Rating"] != "NR"
select d;