2014-12-05 99 views
0

我有一個數據庫表列,其中包含逗號分隔的字符串列表。我需要在這個表格中查詢逗號分隔列中的字符串。使用String.Split()。在CSV列上使用Linq/Lambda包含()

表:

public class MyObject 
{ 
    public string sIds { get; set; } 

    ... 
} 

如果在我的表中的SID列包含:

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

顯示的'MyObject'請 – nozzleman 2014-12-05 06:39:49

+0

類定義爲什麼你甚至需要分割字符串?爲什麼不在Ids列上做一個String.Contains? – CSharpie 2014-12-05 07:27:07

+0

您是否嘗試過不使用'.AsNoTracking()'?對我來說,其餘的代碼應該沒問題。 – Kutyel 2014-12-05 07:28:22

回答

2

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

+0

這解釋了這個問題。作爲一種臨時解決方案,由於無論如何只有幾十條記錄,因此我將結果存儲在一個變量中,然後使用String.Split查詢變量。謝謝。 – rwkiii 2014-12-05 09:31:07

0

在SQL相對應的是「IN」,則包含在LINQ有點像反向: -

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