Запросить фильтрацию записи таблицы строк через запятую с помощью Entity Framework? - PullRequest
0 голосов
/ 23 декабря 2011

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

equipment_id | имя_оборудования | department_id

Department_id хранится со строкой идентификаторов, разделенных запятыми (т.е. 1,4,5,7)

С учетом Department_id я хотел бы получить все предметы экипировки, связанные с этим идентификатором отдела.

Просто интересно, есть ли элегантный способ написания запроса или мне нужно захватить каждый элемент оборудования, разделить столбец Department_id, проверить, совпадает ли идентификатор и добавить элемент оборудования обратно в отдельный список?

Ответы [ 3 ]

1 голос
/ 23 декабря 2011

Есть ли способ правильно нормализовать данные? Один столбец никогда не должен содержать разделенную запятыми строку идентификаторов.

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

0 голосов
/ 11 апреля 2014

Вот решение, которое будет возвращать все записи, которые содержат конкретный идентификатор отдела.

var start = department_id + ",";
var end = "," + department_id;
var contains = "," + department_id + ",";

var results = from e in context.Equipment
              where (e.department_id.StartsWith(start)
              || e.department_id.EndsWith(end)
              || e.department_id.Contains(contains)
              || e.department_id.Equals(department_id))
              select e;
0 голосов
/ 24 декабря 2011

У вас есть два основных варианта здесь

  1. Разделить с помощью UDF, который возвращает список целых чисел. Вы отображаете этот UDF в EF и вызываете его напрямую.

  2. Разделить код после его возвращения. Если вы используете слой хранилища для этого элемента, влияние на вызывающих будет минимальным, поскольку все, что они делают, это запрашивают его из вашего хранилища, которое обрабатывает разбиение.

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