Фильтр объекта с использованием массива строк не работает - PullRequest
0 голосов
/ 09 января 2019

Я исследовал и обнаружил, что я использую. Содержит массив для фильтрации сущностей, но мой результирующий список пуст, что не так?

public List<Order> GetOrderstoShip()
    {
        var shipvia = new string[] { "UPS", "FED", "EX", "USP" };
        var orders = db.Orders.Where(
            x => x.VOID != "Y" && x.GONEDATE == "")
            .ToList();
        var exporders = orders.Where(
            x => shipvia.Contains(x.SHIPVIA.ToUpper())
            ).ToList();
        // Problem: exporders contains 0 items
        // My database field contains the following:
        // FEDEX, UPS, USPS, FEDEX GND, FEDEXGND
        // And, I made sure orders has a list of 900+ items
        return exporders;
    }

Новая разработка: я зашел в свою БД и отредактировал одну запись Я установил для поля ShipVia значение ИБП (ранее это был ИБП GND) и получил один элемент обратно в экспортер. Это означает, что .Contains - точное совпадение. Так как же заставить его сделать что-то похожее на SQL Like?

Я думал, что весь смысл использования содержит то, что это частичное совпадение.

Ответы [ 2 ]

0 голосов
/ 09 января 2019

Мне пришлось использовать обходной путь, так как у меня было только три строки для проверки, я расширил свой фильтр, используя или ... не самый элегантный, но он позволяет мне продолжить мой проект!

Если кто-нибудь выяснит, почему .Contains не работает, пожалуйста, дайте мне знать ...

public List<Order> GetOrderstoShip()
    {
        var shipvia = new string[] { "UPS", "FED", "EX", "USP" };
        var orders = db.Orders.Where(
            x => x.VOID != "Y" && x.GONEDATE == "" && (
            x.SHIPVIA.Contains("UPS") ||
            x.SHIPVIA.Contains("FED") ||
            x.SHIPVIA.Contains("USP"))
            ).ToList();

        var exporders = orders.Where(
            x => shipvia.Contains(x.SHIPVIA.Trim().ToUpper())
            ).ToList();

        // Problem: exporders contains 0 items
        // My database field contains the following:
        // FEDEX, UPS, USPS, FEDEX GND, FEDEXGND
        // And, I made sure orders has a list of 900+ items
        return orders;
    }
0 голосов
/ 09 января 2019

Просто сделай удар. Возможно, в вашей таблице базы данных есть пробелы. Вы можете сначала попытаться обрезать результаты.

shipvia.Contains(x.SHIPVIA.Trim().ToUpper())

Я бы предложил сделать этот фильтр до возвращения результатов. Это ускорит время запроса к базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...