Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Здравствуйте.

Подскажите пожалуйста как можно исключить свойства из запроса по их названию?

К примеру:
entity.Table.ToList();
..имеет на выходе набор свойств
Id, Name, Date, Rem 

Как мне можно из этого готового набора исключить Name и Rem? по строковым названием этих полей 'Name' и 'Rem'?
27 мар 15, 09:23    [17438383]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Monochromatique
Member [заблокирован]

Откуда:
Сообщений: 1936
Nechto
Здравствуйте.

Подскажите пожалуйста как можно исключить свойства из запроса по их названию?

К примеру:
entity.Table.ToList();
..имеет на выходе набор свойств
Id, Name, Date, Rem 

Как мне можно из этого готового набора исключить Name и Rem? по строковым названием этих полей 'Name' и 'Rem'?


А зачем?? Плохие игры.
27 мар 15, 10:09    [17438654]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Вот, может так понятнее будет что я хочу:

var query = 
     dbcontext
     .Table
     
     // Как здесь исключить из выборки поля(свойства), по строковым названиям 'Name' и 'Rem'     

     .ToList(); 
27 мар 15, 11:04    [17439021]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Monochromatique
Member [заблокирован]

Откуда:
Сообщений: 1936
Nechto
Вот, может так понятнее будет что я хочу:

var query = 
     dbcontext
     .Table
     
     // Как здесь исключить из выборки поля(свойства), по строковым названиям 'Name' и 'Rem'     

     .ToList(); 


Да понятно, чего вы хотите. То что вы хотите - ПЛОХО.
Да еще и по строковым значениям.
27 мар 15, 11:26    [17439195]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
carrotik
Member

Откуда:
Сообщений: 1491
Nechto,

... через Expression можно, создав предварительно класс нужной выборки ... вот примерно так (здесь таблица Users, а выборка только Id и ФИО в классе UserListDTO):

private static readonly Expression<Func<Users, UserListDTO>> AsUserListDTO =
            x => new UserListDTO
                {
                    serial = x.serial,
                    familyname = x.familyname.TrimEnd()
                };

[HttpGet] 
        public IQueryable<UserListDTO> GetUserList()
        {
            return db.Users.Select(AsUserListDTO).OrderBy(c => c.familyname);
        }
27 мар 15, 11:34    [17439268]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Monochromatique
Member [заблокирован]

Откуда:
Сообщений: 1936
carrotik
Nechto,

... через Expression можно, создав предварительно класс нужной выборки ... вот примерно так (здесь таблица Users, а выборка только Id и ФИО в классе UserListDTO):

private static readonly Expression<Func<Users, UserListDTO>> AsUserListDTO =
            x => new UserListDTO
                {
                    serial = x.serial,
                    familyname = x.familyname.TrimEnd()
                };

[HttpGet] 
        public IQueryable<UserListDTO> GetUserList()
        {
            return db.Users.Select(AsUserListDTO).OrderBy(c => c.familyname);
        }


Он хочет исключать по _строковым_ значениям.
27 мар 15, 11:35    [17439292]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Monochromatique
carrotik
Nechto,

... через Expression можно, создав предварительно класс нужной выборки ... вот примерно так (здесь таблица Users, а выборка только Id и ФИО в классе UserListDTO):

private static readonly Expression<Func<Users, UserListDTO>> AsUserListDTO =
            x => new UserListDTO
                {
                    serial = x.serial,
                    familyname = x.familyname.TrimEnd()
                };

[HttpGet] 
        public IQueryable<UserListDTO> GetUserList()
        {
            return db.Users.Select(AsUserListDTO).OrderBy(c => c.familyname);
        }

Он хочет исключать по _строковым_ значениям.


В том то и дело, если можно было просто класс использовать, то и проблемы бы не было.
27 мар 15, 12:13    [17439624]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Monochromatique
Member [заблокирован]

Откуда:
Сообщений: 1936
Nechto
Monochromatique
пропущено...

Он хочет исключать по _строковым_ значениям.


В том то и дело, если можно было просто класс использовать, то и проблемы бы не было.


Ты эти поля в рантайме определяешь что ли?
27 мар 15, 12:16    [17439636]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
carrotik
Member

Откуда:
Сообщений: 1491
Nechto

В том то и дело, если можно было просто класс использовать, то и проблемы бы не было.


.. ну, если какие-то ограничения вероисповедальные, то всегда есть ExecuteStoreQuery, а там селект чо хошь куда хошь ..
27 мар 15, 12:17    [17439643]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
carrotik
Nechto
В том то и дело, если можно было просто класс использовать, то и проблемы бы не было.


.. ну, если какие-то ограничения вероисповедальные, то всегда есть ExecuteStoreQuery, а там селект чо хошь куда хошь ..


Им тоже пробовал. Не вышло:

var dsd = dbcontext.table.ExecuteStoreQuery<IEnumerable<object>>(select Id, Date from table).ToList();

Тоже не выходит, поскольку нужно использовать класс на выходе. А я не могу знать сколько полей выберет пользователь и в каком порядке.
27 мар 15, 12:29    [17439761]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Axeleron
Member

Откуда: London
Сообщений: 7531
Nechto
Здравствуйте.

Подскажите пожалуйста как можно исключить свойства из запроса по их названию?

К примеру:
entity.Table.ToList();
..имеет на выходе набор свойств
Id, Name, Date, Rem 


Как мне можно из этого готового набора исключить Name и Rem? по строковым названием этих полей 'Name' и 'Rem'?

Объясните зачем это необходимо? Оптимизации запроса или 'чистоты' объектов ради?
27 мар 15, 12:43    [17439886]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Ради отчета.
К примеру имеется таблица с полями.

Пользователь решил сформировать отчет по таблице, он в форме выбирает нужные ему поля из таблицы. Далее я по выбранным полям пользователя делаю запрос. Порядок выбранных полей нужно тоже учитывать.
27 мар 15, 12:47    [17439921]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Axeleron
Member

Откуда: London
Сообщений: 7531
Nechto,
Так EF тут не при чем - это не его задача. Надо выбирать все данные, а затем в бизнес-логике приложения выбирать нужные поля в нужном порядке - уж не знаю как Вы это планируете реализовать. А отчет в каком виде будет представлен?
27 мар 15, 12:57    [17439991]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Axeleron
Nechto,
Так EF тут не при чем - это не его задача. Надо выбирать все данные, а затем в бизнес-логике приложения выбирать нужные поля в нужном порядке - уж не знаю как Вы это планируете реализовать. А отчет в каком виде будет представлен?


В Excel.

Я думал что можно подготовить это все в запросе, средствами ef.
27 мар 15, 13:13    [17440107]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Axeleron
Member

Откуда: London
Сообщений: 7531
Nechto
Axeleron
Nechto,
Так EF тут не при чем - это не его задача. Надо выбирать все данные, а затем в бизнес-логике приложения выбирать нужные поля в нужном порядке - уж не знаю как Вы это планируете реализовать. А отчет в каком виде будет представлен?


В Excel.

Я думал что можно подготовить это все в запросе, средствами ef.

Не получится. У вас же под отмапленной таблицей в модели находится класс с набором проперти - как Вы собираетесь эти проперти 'вертеть' (сортировать) в экземпляре класса? Задача EF в данном случае заключается только вернуть данные, а за сортировку, вывод или невывод определенных полей оттуда - это реализовать уже Ваша задача в бизнес логике приложения, а затем уже сделать экспорт данных в нужном Вам виде в Excel.
27 мар 15, 13:28    [17440210]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Axeleron
Member

Откуда: London
Сообщений: 7531
Nechto,
А еще вариант получше - написать used defined function в базе, в которой строить и выполнять динамический запрос, а на выходе уже получать сразу CSV строку.
27 мар 15, 13:32    [17440245]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
skyANA
Member

Откуда: Зеленоград
Сообщений: 28155
Nechto
Ради отчета.
К примеру имеется таблица с полями.

Пользователь решил сформировать отчет по таблице, он в форме выбирает нужные ему поля из таблицы.
В каком виде таблица представлена на форме? Она уже содержит необходимые пользователю данные?
27 мар 15, 14:03    [17440463]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Gluck_13
Member

Откуда: Санкт-Петербург
Сообщений: 207
Nechto
Ради отчета.
К примеру имеется таблица с полями.

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


Можно предложить 2 варианта:
1. Сгенерировать запрос на Entity SQL, выполнить его, вернуть пользователю результат в виде DataTable. Большинство построителей отчета .NET поддерживают работу с датасетами.
2. Создать динамический класс для результата в сборке RunAndCollect, вручную собрать LINQ Expression для запроса, выполнить его.

Мы выбрали второй вариант, с поддержкой динамических условий и выражений для колонок, задаваемых как графически, так и на DSL.
3 апр 15, 08:04    [17467346]     Ответить | Цитировать Сообщить модератору
 Re: Исключить поля в запросе EF4  [new]
Nechto
Member

Откуда:
Сообщений: 825
Спасибо за разъяснения!
3 апр 15, 08:55    [17467478]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить