簡體   English   中英

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

[英]Using String.Split().Contains() on CSV column using 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.

有很多與我的問題相似的文章,但我一直無法找到確切的解決方案。 我的代碼是否有問題,或者應該以其他方式完成?

EF不支持String.Split。 這是因為SQL中沒有等效項。 您可以嘗試在數據庫中定義自己的函數,如此處所述: http : //sqlperformance.com/2012/07/t-sql-queries/split-strings 或者,您可以嘗試將部分邏輯從服務器移至客戶端。

SQL中的等效項是“ IN”,LINQ中的Contains有點像反向:-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM