我已经研究发现,我在数组上使用.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的全部目的是要部分匹配。
答案 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;
}