Linq To SQL: могу ли я загружать только одно поле в объединенной таблице?

У меня есть одна таблица "заказы" с иностранным ключом "ProductID".

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

Есть ли способ получить Только название продукта в первом запросе? Могу ли я установить какой-нибудь атрибут в DBML?

В этом стол говорит, что «значения внешнего ключа» являются «видимыми» в Linq To SQL, но не знает, что это означает.

Редактировать: Изменил заголовок, потому что не совсем уверен, что решения нет. Не могу поверить, что ни у кого нет такой проблемы, это очень распространенный сценарий.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 136
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Если вы выберете только нужные столбцы в запросе linq, а затем вызовете .ToList () в запросе, он будет немедленно выполнен и вернет только те столбцы, которые вам интересны. Например, если вы сделаете это:

var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();

Вы получите обратно список названий продуктов, хранящихся в результатах, и когда запрос выполняется на сервере, он вернет только столбец ProductName.

Вы имеете в виду список для поиска, который ищет имя для каждой записи?

Eduardo Molteni 16.12.2008 22:56

Нет ... Обычно с linq, когда вы запускаете "var q = from c в db.Custs select c;" запрос не будет выполнен до тех пор, пока вы не выполните foreach по q. Это также обрушивает все клиентские поля. Если вы запустите q.ToList (), метод «ToList» выполнит переход по q и вставит результаты в список.

Scott Wisniewski 17.12.2008 00:14

Также ... если вы измените поля в запросе, чтобы вы сделали "var q = (from c in db.Custs select c.CustID, c.CustName) .ToList ();" тогда база данных будет: 1) Выполнять запрос немедленно 2) Вывести только столбцы CustID и CustName.

Scott Wisniewski 17.12.2008 00:16

Но я хочу вывести все поля заказа, а также название продукта (и имя клиента и т. д.). Как это связано с вопросом?

Eduardo Molteni 17.12.2008 01:31

Вы сказали, что: 1) Вы не хотите использовать ленивую загрузку 2) У вас есть набор определенных столбцов, которые вы хотите отключить, и вы не хотите ничего, кроме этих столбцов. Запуск ToList () запускает запрос предварительное изменение списка выбора приводит к уменьшению именно того набора полей, который вы запрашиваете.

Scott Wisniewski 18.12.2008 15:03

Вы просите об уровне оптимизации, который не обеспечивает linq-to-sql. Я думаю, что лучше всего создать запрос, который возвращает именно те данные, которые вы хотите, возможно, в виде анонимного типа:

from order in DB.GetTable<Orders>()
join product in DB.GetTable<Products>()
on order.ProductID = product.ID
select new { ID = order.ID, Name = order.Name, ProductName = product.Name };

Жить со всеми этими анонимными типами будет кошмаром.

Eduardo Molteni 16.12.2008 22:55

@Eduardo: Напротив, в некоторых случаях (в частности, в этом типе случаев) анонимные типы действительно могут значительно упростить задачу.

BenAlabaster 19.12.2008 17:28
Ответ принят как подходящий

Я получил решение в этом другом вопросе Какой .net ORM может справиться с этим сценарием, который связан с ответом Liammclennan, но более ясным (возможно, вопрос был более ясным)

Другие вопросы по теме