Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 linq where子句中以逗号分隔的列_Asp.net Mvc 4_Linq To Entities - Fatal编程技术网

Asp.net mvc 4 linq where子句中以逗号分隔的列

Asp.net mvc 4 linq where子句中以逗号分隔的列,asp.net-mvc-4,linq-to-entities,Asp.net Mvc 4,Linq To Entities,我有像“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 但它不工作,我得到下面的错误 LINQ to Entities无法识别方法“Syste

我有像“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 但它不工作,我得到下面的错误

LINQ to Entities无法识别方法“System.String[]Split(Char[])”方法,并且无法将此方法转换为存储表达式


LINQtoEntities尝试将查询表达式转换为SQL。String.Split不是受支持的方法之一。看

假设无法重新设计数据库结构,则必须绕过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))
如果产品表很大,这不是一个好主意,因为您将失去SQL的一个主要优点,并在筛选之前加载所有数据

重新设计 如果这是一个问题,并且可以更改数据库结构,则应创建一个子表,用适当的规范化结构替换逗号分隔的值。逗号分隔变量看起来可能是一种方便的快捷方式,但它们不是一种好的设计,正如您所发现的,在SQL中使用起来并不容易

SQL
如果设计无法更改且表很大,那么您唯一的其他选择就是手动滚动SQL并直接执行,但这将失去使用Linq的一些好处。

您需要首先从实体获取数据,然后执行上述语句。第一个do var myList=(从ProductTables中的prdtbl中选择prdtbl);然后像上面一样从myList查询
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))