从表中筛选具有逗号和管道分隔值的列

时间:2019-01-03 14:07:41

标签: c# .net linq

我有一个表名称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 []”。 ” 请帮忙!!!

1 个答案:

答案 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 + "|"));