c# - 如何在 for 循环中使用 OR 语句过滤 IQueryable
问题描述
我正在尝试按颜色 ID过滤产品列表,并且我想显示具有此颜色列表的所有产品,并且我正在应用分页,这就是我使用 IQueryable 的原因。
我尝试做这样的事情,但产品结果并没有得到所有的对象,比如:
if (!string.IsNullOrEmpty(productsParams.ColorsId))
{
var colorsIds = productsParams.ColorsId.Split(',');
List<Product> filtredProducts = new List<Product>();
foreach (var color in colorsIds)
{
var productColors = products.Where(c => c.ColorId == int.Parse(color));
filtredProducts.AddRange(productColors);
}
products = filtredProducts.AsQueryable();
}
但发生错误System.InvalidOperationException: The source IQueryable doesn't implement IAsyncEnumerable<YounesCo_Backend.Models.Product>. Only sources that implement IAsyncEnumerable can be used for Entity Framework asynchronous operations.
我该如何过滤具有多种颜色的产品列表?
解决方案
一(和)
if (!string.IsNullOrEmpty(productsParams.ColorsId)) { var colorsIds = productsParams.ColorsId.Split(','); var query = products.AsQueryable() ; foreach (var color in colorsIds) { query = query.Where(c => c.ColorId == int.Parse(color)); } List<Product> filtredProducts = query.ToList(); }
两个(或)
if (!string.IsNullOrEmpty(productsParams.ColorsId)) { int[] colorsIds = ToIntArray(productsParams.ColorsId.Split(',')); List<Product> filtredProducts = products.Where(c => colorsIds.Contains(c.ColorId)).ToList(); }
你必须实现 ToIntArrat(List list) 方法,(Convert List<String[]> to Array int[][])
推荐阅读
- c# - 使用 System.Text.Json 转换不一致的 json 值
- antlr4 - 数字和十六进制的 Antlr 规则
- asp.net - 我可以使用 EF Core 5 InMemory 数据库进行集成测试吗
- excel - 在 Excel 中保存为 CSV 时的舍入数
- python - Python:如何在行首和行尾使用文本分隔符处理 CSV?
- elasticsearch - 弹性搜索条件布尔查询
- excel - 问:COUNTIF 仅当 COUNTIF
- c# - 如何检查文件夹是否为空?
- java - 如何使用 System.out.print 使方法成为原子方法
- material-ui - 在 MUI v5 中,如何使所有元素高度相同并垂直对齐?