Pergunta

Vamos dizer que tenho duas tabelas (Address e Phone) em sql que têm um-para-um relacionamento. Eu criei o LINQ to SQL correspondente aulas e mudou a associação para OneToOne

Eu quero recuperar ambos os objetos, filtrando objeto filho. por exemplo eu tenho a seguinte consulta que funciona bem:

var n = db.Addresses.Where(t => t.Phone.Number == 100);

Existe alguma maneira eu posso fazer o seguinte trabalho:

var n = db.Addresses.Where(t => t.Phone == new Phone(100));

O construtor da classe Phone acima inicializa a propriedade Number. Como eu posso ver a consulta que é emitido contém uma cláusula que filtra a tabela Telefones por id (chave primária), mas a cláusula número não incluído.

Se eu definir Number como chave primária no visual studio, então ele está incluído na cláusula onde, mas a busca ainda não retornar nada como o valor do parâmetro para id é 0. Mesmo se funcionou, não é uma solução, como Number deve não ser uma chave primária.

Foi útil?

Solução

O que você está pedindo não muito sentido. Se você deseja que o elemento telefone dado o endereço, você tem isso acessando a propriedade Address.Phone.

Você não pode inicializar um tipo e usar isso para projeto sobre como este é DLINQ, onde a consulta é traduzida para baixo para o DB. Você pode fazer isso em Linq para objetos, mas seria forçá-lo a enumerar a sua lista, que iria buscar todas as informações do banco de dados na memória, o que pode não ser bom para o desempenho ...

Não vejo o problema aqui? Você tem o endereço, uma busca trabalhar para ele, e você pode acessar a propriedade telefone acessando a propriedade de endereço.

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