我有一个表名称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'类型的异常,但未在用户代码中处理
其他信息:参数'value'是错误的类型。预期为“ System.String”。实际的“ System.String []”。 ” 请帮忙!!!
答案 0 :(得分:0)
如果要使用LINQ过滤掉实体,则必须将ProductTbl
转换为eg。清单。试试:
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 + "|"));