Сведения о вопросе

Ayrat

03:13, 12th August, 2020

Теги

.net   sql   performance   linq-to-sql    

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

Просмотров: 490   Ответов: 3

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

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

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

В этой таблице говорится, что "Foreign-key values"-это "Visible" в Linq-SQL, но не знаю, что это значит.

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



  Сведения об ответе

crush

19:02, 2nd August, 2020

То, что вы просите, - это уровень оптимизации, который не обеспечивает 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 };


  Сведения об ответе

dump

23:02, 7th August, 2020

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

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

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


  Сведения об ответе

+-*/

06:09, 23rd August, 2020

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


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться