我有像“4,3,8”
这样的价值观我在表格中有逗号分隔列,如下所示。
ID | PrdID | cntrlIDs 1 | 1 | 4,8 2 | 2 | 3 3 | 3 | 3,4 4 | 4 | 5,6 5 | 5 | 10,14,18
我只希望上表中与上述字符串匹配的那些记录
例如。 1,2,3这条记录在输出时需要,因为它与传递的字符串“4,3,8”匹配
注意:我需要在实体框架LINQ Query中使用它。
string[] arrSearchFilter = "4,3,8".Split(',');
var query = (from prdtbl in ProductTables
where prdtbl.cntrlIDs.Split(',').Any(x=> arrSearchFilter.Contains(x))
但它不起作用,我得到了以下错误
LINQ to Entities无法识别方法'System.String [] Split(Char [])'方法,而且此方法无法转换为商店表达式。
答案 0 :(得分:1)
LINQ to Entities尝试将查询表达式转换为SQL。 String.Split不是受支持的方法之一。见http://msdn.microsoft.com/en-us/library/vstudio/bb738534(v=vs.100).aspx
假设您无法重新设计数据库结构,则必须绕过SQL过滤器并获取所有记录,然后应用过滤器。您可以使用ProductTables.ToList()
执行此操作,然后在第二个查询中使用此字符串拆分,例如
string[] arrSearchFilter = "4,3,8".Split(',');
var products = ProductTables.ToList();
var query = (from prdtbl in products
where prdtbl.cntrlIDs.Split(',').Any(x=> arrSearchFilter.Contains(x))
如果Product表很大,这不是一个好主意,因为您正在失去SQL的主要优点并在过滤之前加载所有数据。
如果这是一个问题,并且您可以更改数据库结构,则应创建一个子表,用可用规范化结构替换逗号分隔值。逗号分隔的变量可能看起来像一个方便的快捷方式,但它们不是一个好的设计,正如您所发现的那样,在SQL中使用起来并不容易。
如果设计无法更改且表格很大,那么您唯一的另一个选择是手动滚动SQL并直接执行此操作,但这会失去Linq的一些好处。