Можно ли динамически ограничить количество столбцов, возвращаемых из запроса LINQ to SQL?
У меня есть SQL-представление базы данных с более чем 50 столбцами. Мое приложение имеет объект домена с более чем 50 свойствами, по одному для каждого столбца. В моем проекте winforms я привязываю список объектов домена к сетке. По умолчанию отображаются только некоторые из столбцов, однако пользователь может включать/выключать любой из столбцов.
Пользователи жалуются, что сетка занимает слишком много времени для загрузки. Я захватил созданный LINQ SQL-запрос, затем выполнил его в SQL Server Management Studio и проверил его медленный. Если я изменяю инструкцию SQL, удаляя все невидимые столбцы, она выполняется почти мгновенно. Прямая корреляция между производительностью и количеством столбцов в запросе.
Мне интересно, возможно ли его динамическое изменение количества столбцов, возвращаемых из SQL-запроса, сгенерированного LINQ? Например, вот как выглядит мой код:
public List<Entity> GetEntities()
{
using (var context = new CensusEntities())
{
return (from e in context.Entities
select e).ToList();
}
}
Объект context.Entities был сгенерирован из представления SQL, содержащего более 50 столбцов, поэтому при выполнении выше он генерирует SQL, как "SELECT Col1, Col2, Col3,... Col50 FROM Entity INNER JOIN...". Я хотел бы изменить подпись метода, чтобы она выглядела так:
public List<Entity> GetEntities(string[] visibleColumns)
{
using (var context = new CensusEntities())
{
return (from e in context.Entities
select e).ToList();
}
}
Я не уверен, как изменить тело этого метода, чтобы изменить сгенерированный оператор SQL, чтобы возвращать значения столбца, о которых я забочусь, все остальные могут быть NULL.