我有一个数据库表列,其中包含逗号分隔的字符串列表。我需要在此表中查询逗号分隔列中的字符串。
表格:
public class MyObject
{
public string sIds { get; set; }
...
}
如果我表中的sIds列包含:
sIds = "DG,VO,XX,AB"
我执行以下代码:
string _sId = "AB";
List<MyObject> designParams = _context.DesignParams
.AsNoTracking()
.Where(c => c.sIds.Split(',').Contains(_sId))
.Select(c => c)
.ToList();
我得到NotSupportedException:LINQ to Entities does not recognize the method 'System.String[] Split(Char[])' method, and this method cannot be translated into a store expression.
。
有很多文章与我的问题相似,但我找不到确切的解决方案。我的代码有什么问题,或者应该采用不同的方式吗?
答案 0 :(得分:2)
EF不支持String.Split。这是因为SQL中没有等价物。 您可以尝试在数据库中定义自己的函数,如下所述:http://sqlperformance.com/2012/07/t-sql-queries/split-strings。 或者您可以尝试将部分逻辑从服务器移动到客户端。
答案 1 :(得分:0)
SQL中的等价物是&#34; IN&#34 ;, LINQ中的包含有点像反向: -
List<MyObject> designParams = _context.DesignParams
.AsNoTracking()
.Where(c => _sId.Contains(c.sIds))
.Select(c => c)
.ToList();