2012-01-10 47 views
0

的我已經以下表:LINQ到SQL查詢與來自翻譯逗號分隔的代碼,以逗號分隔的描述

  1. 「程序」:

    代碼:BIGINT,主鍵,自動遞增

    標題:VARCHAR(最大),非空

  2. 「工作表」:

    代碼:BIGINT,主鍵,自動遞增

    標題:VARCHAR(最大),而不是空

    程序:VARCHAR(最大)的程序代碼

    ,非空,逗號分隔的字符串

    ...

我使用LINQ到SQL查詢表「工作表」與列「程序」被翻譯成過程字幕的逗號分隔的字符串。

例如子查詢的「工作表」,「程序」:不過,我面臨的異常

procedures = string.Join(",", (
    from pc in w.procedures.Split(',').Select(cs => long.Parse(cs)).ToList() 
    join ps in db.procedures.AsEnumerable() on pc equals ps.code 
    select ps.caption 
).ToArray()), 

「分割()與SQL沒有支持的翻譯」。

請注意如何做到這一點。 非常感謝!

+0

這個例外很明顯。你還沒有弄清楚什麼? – 2012-01-10 04:25:25

+0

我能理解那個例外的意思。然而,即使我嘗試過調用AsEnumerable()方法,我也不知道如何糾正查詢。 – 2012-01-10 04:27:52

回答

0

在你已經顯示的查詢,您必須首先從數據庫使用LINQ查詢像獲取記錄:

var abc = w.procedures.ToList(); 

var abc = w.procedures.ToList().Select(cs => cs).Split(...); 

現在在ABC,你可以使用任何你的字符串函數..因爲一旦你做了ToList,它將從數據庫中獲取記錄。

希望這會有幫助..

2

您將無法解決查詢問題。您需要將原始數據提取到C#,然後處理拆分。

這是因爲在您當前的代碼中,您要求sql服務器執行拆分,並且它沒有實現。因此,錯誤...

1

以下將傳遞procList中的每個項目作爲單獨的SQL參數,以便它可以將它放在一個SQL IN子句中。如果沒有太多,這應該很好。

var procList = w.procedures.Split(',').Select(cs => long.Parse(cs)).ToList(); 

var procedures = (from ps in db.procedures.AsEnumerable() 
    where procList.Contains(ps.Code) 
    select ps.Caption).ToArray()