в DBML, как получить дочернюю таблицу с конкретными полями, а не со всеми полями - PullRequest
0 голосов
/ 21 января 2019

Мы используем SQL Server, и приложение разработано с DBML . Теперь из-за функциональности нетерпеливой загрузки у меня возникла проблема. У меня есть таблица A , которая связана с таблицей B . ( A -> B ). Теперь, когда я пытаюсь загрузить таблицу A, он получит все поля таблицы B. Culprit таков, что таблица B имеет 2-3 столбца, которые очень тяжелые, содержат данные byte array, и из-за этих столбцов это занимает слишком много нагрузки также для получения данных таблицы А.

Вопрос
Могу ли я иметь такой способ, что я могу загрузить только несколько столбцов (не все столбцы) таблицы B, когда я получаю таблицу A?

Что я пробовал
Я получаю эту ошибку:

Указанное выражение должно иметь форму p.A, где p - это параметр и A - это свойство или член поля.

когда я попробовал с кодом ниже -

DataContext2.DeferredLoadingEnabled = false;
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<A>(x => x.Campaign);
options.LoadWith<A>(x => x.AnotherTable);
options.LoadWith<A>(x => x.B.Select(o => new B
{
    Id = o.Id,
    Name = o.Name,
    Person = o.Person,
}).ToList());
DataContext2.LoadOptions = options;

1 Ответ

0 голосов
/ 21 января 2019

Просто используйте join и select только необходимые столбцы:

var yourQuery = (from t_A in dbContext.Table_A
             join t_B in dbContext.Table_B on t_A.ID equals t_B.ID                 
             //use where operator to filter rows
             select new {
                 Id = t_B.Id,
                 Name = t_B.Name,
                Person = t_B.Person
                  // any field you want from your query
             }).ToList();
...