c# - 从表中过滤具有逗号和管道分隔值的列
问题描述
我有一个表名 TblDiscount,其中一列(产品)有一个逗号和管道分隔的值,如
"Product1|1,Product2|1,Product3|1",
"Product2|1,Product4|1,Product5|2",
等所以记录存储如下:
Id | Product
1 | Product1|1,Product2|1,Product3|1
2 | Product2|1,Product4|1,Product5|2
3 | Product6|1,Product7|1,Product8|2
我想在此列(产品)上应用过滤器。因此,如果我搜索“product5”,那么它应该返回 ID=2 的第二行。当我使用内存列表时,它工作正常
List<string> products = new List<string> { "22235|1,22232|1,22246|1",
"22246|1,22245|1,22247|1" };
var result = products.Where(x => x.Split(',').Any(c => c.Split('|').Any(y
=> y.Equals("22247")))).FirstOrDefault();
但是当我用 sql 数据库表运行它时,它给了我错误:实际代码如下:
var isExist = this.DataContext.ProductTbl.Where(x => x.IsActive &&
x.product.Split(',').Any(c => c.Split('|').Any(y => y.Contains(productCode)))).Any()
它给我的错误是:
“ System.Data.Linq.dll 中发生'System.ArgumentException' 类型的异常,但未在用户代码中处理
附加信息:参数“值”是错误的类型。应为“System.String”。实际的'System.String[]'。“ 请帮忙!!!
解决方案
如果您想使用 LINQ 过滤掉实体,则必须转换ProductTbl
为例如。列表。尝试:
var isExist = this.DataContext.ProductTbl.ToList().Where(x => x.IsActive &&
x.product.Split(',').Any(c => c.Split('|').Any(y => y.Contains(productCode)))).Any();
但是,如果您只需要获取包含某些产品的行,您可以尝试:
var isExist = this.DataContext.ProductTbl.Any(x=> x.IsActive && ("," + x.product).Contains(productCode + "|"));
推荐阅读
- mysql - if 语句未在 JSP scriptlet 中执行
- java - webview中的批处理事件有可能吗?
- python - pandas.read_feather 得到了一个意想不到的参数 nthreads
- java - How to get week of year and week of month in Jalali (Shamsi) calendar
- c++ - 用 return 语句结束析构函数是否安全?
- azure - Azure Web 作业日志
- angular - 预算中的警告,初始超出最大值
- python - 将自制包函数导入正确的命名空间
- asp.net-core-mvc - 使用从下拉列表中选择更改数据表中的数据
- c# - 在 WPF App 中存储数据 - 寻找解决方案