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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top