2012-01-10 3 views
0

Я следующие таблицы:Linq к SQL-запрос с переводом из разделенных запятыми кода в разделенных запятыми описания

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

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

    надпись: VARCHAR (макс), не-нуль

  2. "Worklist":

    кода: 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()), 

Однако я столкнулся за исключением «Split() не поддерживается перевод в SQL».

Просьба сообщить, как это сделать. Большое спасибо!

+0

Исключение довольно ясное. Что ты не смог понять? –

+0

Я могу понять смысл этого исключения. Тем не менее, я не знаю, как исправить запрос, даже я пробовал что-то о вызове AsEnumerable(). –

ответ

0

В запросе вы показали, вы должны сначала извлечь записи из БД с помощью Linq запрос как:

var abc = w.procedures.ToList(); 

или

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

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

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

2

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

Это связано с тем, что в вашем текущем коде вы запрашиваете сервер 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() 
Смежные вопросы