我有以下表格:
“程序”:
代码:bigint,主键,自动增量
caption:varchar(max),not-null
“工作清单”:
代码:bigint,主键,自动增量
title:varchar(max),not-null
过程:varchar(max),not-null,逗号分隔的过程代码字符串
...
我正在使用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中没有受支持的翻译”。
请建议如何做到这一点。 非常感谢!
答案 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,它将从数据库中获取记录。
希望这有助于......