使用字符串数组的过滤器实体不起作用

时间:2019-01-09 19:38:31

标签: c# entity-framework linq

我已经研究发现,我在数组上使用.contains来过滤实体,但是我得到的列表为空,这是什么问题?

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字段设置为UPS(以前是UPS GND),并且退回了一件商品。 这意味着.contains是完全匹配的。那么,如何使它执行类似于SQL Like的操作?

我认为使用contains的全部目的是要部分匹配。

2 个答案:

答案 0 :(得分:0)

只要一刺。您的数据库表中可能会有空白。您可以尝试先修剪结果。

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

我建议在返回结果之前进行此过滤。这样可以加快数据库查询时间。

答案 1 :(得分:0)

我不得不使用一种变通方法,因为我只有三个字符串要检查,所以我使用或...扩展了过滤器,虽然不是最优雅,但它可以让我继续我的项目!

如果有人弄清楚.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;
    }