2012-01-10 52 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()