Linq: запрос «виртуальных» столбцов, созданных из одного разделенного столбца - PullRequest
0 голосов
/ 24 сентября 2010

Я работаю с довольно неприятным, но неизменным БД.

У нас есть таблица "Locations" со столбцом "Position"

Этот столбец имеет значения типа "A SHELF 5"

Что означает «Дело А, Полка 5». В идеальном мире у меня были бы столбцы Case и Shelf со значениями «A» и 5 соответственно.

Что мне интересно, так это то, что в моих классах сущностей есть способ определить некоторые «виртуальные» (возможно, не правильные слова) столбцы, так что, как только я это сделаю, я могу просто запросить таблицу, как если бы столбцы существовали (пункты «Выбор», «Где», «Группировать по» и т. д.)

По общему признанию, я довольно плохо знаком с Linq, поэтому я даже не использую правильные технические термины, чтобы описать то, что я хочу сделать. Что затрудняет поиск ответов. Поэтому, если кто-то просто захочет указать мне какую-нибудь вводную документацию, которая даже помогла бы мне начать, я бы посчитал это правильным ответом.

Чтобы сделать его более сложным, столбец структурирован только так, как указано выше, в зависимости от значения некоторых других столбцов, но я не буду туда идти.

спасибо, что нашли время прочитать это. Прошлый опыт говорит мне, что Экипаж лучший!

Ответы [ 2 ]

0 голосов
/ 25 сентября 2010

Все, что вы делаете для разделения столбца на несколько других столбцов в Entity Framework, не будет преобразовываться в SQL в ваших запросах. Это означает, что любая фильтрация по производным столбцам будет выполнять свою фильтрацию на клиенте после , получая все строки, не отфильтрованные другими элементами where-условия. Это может не иметь большого значения, но это то, что вам нужно иметь в виду.

Создание вычисляемого столбца само по себе является простым созданием нового свойства в файле частичного кода (как продемонстрировано в ответе Джеймса Керрана). Ваши объекты должны использовать это свойство очень хорошо, даже в запросах.

Лично в вашей ситуации я бы посмотрел на создание представлений на уровне базы данных. Представление таблицы Locations может быть настроено для разбиения ошибочного столбца на два других столбца без особых затруднений, и дополнительные издержки могут окупиться в долгосрочной перспективе. Вам нужно будет следить за обновлениями, но в большинстве случаев это подойдет вам.

0 голосов
/ 24 сентября 2010

Я привык к Ling-to-Sql, а не к Linq-to-Entities, но это должно работать

partial class Location
{
     public string Case 
     {
         get
         {
             int pos = Position.IndexOf(' ');
             if (pos == -1)
                 throw new Exception();
             return Position.Substring(pos);
         }
     }

}
...