Linq-to-sql查询,从逗号分隔的代码转换为逗号分隔的描述

时间:2012-01-10 04:17:46

标签: c# linq linq-to-sql

我有以下表格:

  1. “程序”:

    代码:bigint,主键,自动增量

    caption:varchar(max),not-null

  2. “工作清单”:

    代码:bigint,主键,自动增量

    title:varchar(max),not-null

    过程:varchar(max),not-null,逗号分隔的过程代码字符串

    ...

  3. 我正在使用Linq-to-SQL查询表“worklist”,并将“procedure”列转换为逗号分隔的procedure-caption字符串。

    e.g。 “工作清单”的子查询。“程序”:

    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()),
    

    但是,我面临的问题是“Split()在SQL中没有受支持的翻译”。

    请建议如何做到这一点。 非常感谢!

3 个答案:

答案 0 :(得分:2)

您无法像这样解决查询。您需要将原始数据提取到c#,然后处理拆分。

这是因为在您当前的代码中,您要求sql server进行拆分,并且没有实现。因此错误......

答案 1 :(得分: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()

答案 2 :(得分:0)

在您显示的查询中,您必须首先使用linq查询从db获取记录,如:

var abc = w.procedures.ToList();

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

现在在abc上你可以使用你的任何字符串函数。因为一旦你做了ToList,它将从数据库中获取记录。

希望这有助于......