O Linq To SQL:Posso carrega apenas um campo em uma tabela associada?
-
09-06-2019 - |
Pergunta
Eu tenho uma tabela "orders" com uma chave estrangeira "ProductID".
Eu quero mostrar para as ordens em uma grade com a nome do produto, sem LazyLoad para um melhor desempenho, mas se eu usar DataLoadOptions ele recupera todos Produto de campos, que pareciam um overkill.
Existe uma maneira de recuperar apenas o nome do Produto na primeira consulta?Posso definir algum atributo no DBML?
Neste tabela diz que a "chave Estrangeira valores" são "Visíveis" em Linq Para SQL, mas não sei o que isso significa.
Editar:Mudou o título, porque eu não sou realmente certo o que há não é a solução.
Não posso acreditar que ninguém tem o mesmo problema, é um cenário muito comum.
Solução 3
Recebo a solução esta pergunta Que .net ORM pode lidar com este cenário, que está relacionado com o liammclennan responder, mas mais claro (talvez a pergunta foi mais clara demais)
Outras dicas
O que você está pedindo é um nível de otimização o linq para sql, não fornecem.Eu acho que a sua melhor aposta é criar uma consulta que retorna exatamente os dados que você quiser, possivelmente, como um tipo anônimo:
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 };
Se você selecionar apenas as colunas que você deseja na consulta linq, e, em seguida, chamar .ToList() na consulta, será immedietly executado, e só vai trazer de volta as colunas que você está interessado.Por exemplo, se você fazer isso:
var q = from p in dataContext.products select p.ProductName;
var results = q.ToList();
Você vai receber de volta uma lista de nomes de produtos armazenados em resultados, e quando a consulta é executada no servidor, ele só vai trazer de volta a coluna ProductName.