Запрос Linq-to-sql с переводом кода, разделенного запятыми, в описание, разделенное запятыми - PullRequest
0 голосов
/ 10 января 2012

У меня есть следующие таблицы:

  1. "процедуры":

    код: bigint, первичный ключ, автоинкремент

    заголовок:varchar (макс.), ненулевое

  2. «рабочий список»:

    код: bigint, первичный ключ, автоинкремент

    title: varchar (max), not-null

    процедуры: varchar (max), not-null, разделенная запятыми строка кода процедуры

    ...

Я использую Linq-to-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()),

Тем не менее, я сталкиваюсь с исключением" Split () не поддерживает перевод в SQL ".

Пожалуйста, посоветуйте, как это сделать.Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 11 января 2012

вы не сможете решить запрос как таковой. Вам нужно извлечь ваши необработанные данные в c # и затем обработать разделение.

Это потому, что в вашем текущем коде вы просите sql server выполнить разбиение, и у него нет реализации для этого. Отсюда и ошибка ...

1 голос
/ 11 января 2012

Далее каждый элемент в 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()
0 голосов
/ 12 января 2012

В запросе, который вы показали, вы должны будете сначала извлечь записи из базы данных, используя запрос linq, например:

var abc = w.procedures.ToList();

или

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

, теперь на abc вы можете использоватьлюбая из ваших строковых функций. Потому что, как только вы сделаете ToList, он будет извлекать записи из базы данных.

Надеюсь, это поможет ..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...