使用 String.Split().在 CSV 列上使用 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();

我得到不支持的异常:LINQ to Entities does not recognize the method 'System.String[] Split(Char[])' method, and this method cannot be translated into a store expression.

有很多

文章与我的问题类似,但我无法找到确切的解决方案。我的代码有问题还是应该有不同的方法?

EF

不支持 String.Split。这是因为 SQL 中没有等效项。您可以尝试在数据库中定义自己的函数,如下所述:http://sqlperformance.com/2012/07/t-sql-queries/split-strings。或者,您可以尝试将部分逻辑从服务器移动到客户端。

SQL 中的

等效项是 "IN",LINQ 中的包含有点像反向:

List<MyObject> designParams = _context.DesignParams
.AsNoTracking()
.Where(c => _sId.Contains(c.sIds))
.Select(c => c)
.ToList();

最新更新