使用String.Split()。使用Linq / Lambda在CSV列上包含()

时间:2014-12-05 06:19:30

标签: c# linq lambda

我有一个数据库表列,其中包含逗号分隔的字符串列表。我需要在此表中查询逗号分隔列中的字符串。

表格:

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.

有很多文章与我的问题相似,但我找不到确切的解决方案。我的代码有什么问题,或者应该采用不同的方式吗?

2 个答案:

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