Linq To SQL: Могу ли я загрузить только одно поле в объединенной таблице? - PullRequest
1 голос
/ 27 августа 2008

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

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 27 августа 2008

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

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

0 голосов
/ 27 августа 2008

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

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

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

...