Desejo alterar algumas propriedades de um objeto de resultado da consulta LINQ sem criar um novo objeto e definir manualmente todas as propriedades. Isso é possível?
Exemplo:
var list = from something in someList
select x // but change one property
Respostas:
Não sei ao certo qual é a sintaxe da consulta. Mas aqui está o exemplo expandido da expressão LINQ.
O que isso faz é usar um método anônimo vs e expressão. Isso permite que você use várias instruções em um lambda. Portanto, você pode combinar as duas operações de configuração da propriedade e retorno do objeto nesse método um tanto sucinto.
fonte
ToList()
antes que parece fazer o truque. Não sei por que você conseguiu isso. Se for o Entity Framework, também não funciona com isso.Se você deseja apenas atualizar a propriedade em todos os elementos,
fonte
Eu prefiro este. Pode ser combinado com outros comandos linq.
fonte
Não deve haver mágica do LINQ impedindo você de fazer isso. Não use projeção, pois isso retornará um tipo anônimo.
Isso modificará o objeto real, bem como:
fonte
Não é possível com os operadores de consulta padrão - é Consulta Integrada ao Idioma, não Atualização Integrada ao Idioma. Mas você pode ocultar sua atualização nos métodos de extensão.
Agora você pode usá-lo da seguinte maneira.
fonte
UPDATE
,DELETE
eINSERT
. Portanto, eu não argumentaria que a semântica é a coisa que impede essa função.Se você deseja atualizar itens com uma
Where
cláusula, usar .Where (...) truncará seus resultados se você:Você pode fazer atualizações em itens específicos da lista da seguinte maneira:
Sempre devolva o item, mesmo que você não faça nenhuma alteração. Dessa forma, ele será mantido na lista.
fonte
Muitas vezes, encontramos isso onde queremos incluir o valor do índice e o primeiro e o último indicadores em uma lista sem criar um novo objeto. Isso permite que você saiba a posição do item na sua lista, enumeração etc. sem precisar modificar a classe existente e depois saber se você está no primeiro item da lista ou no último.
Você pode simplesmente estender qualquer classe usando:
fonte
Como não encontrei aqui a resposta que considero a melhor solução, aqui do meu jeito:
É possível usar "Selecionar" para modificar dados, mas apenas com um truque. De qualquer forma, "Selecionar" não é feito para isso. Ele apenas executa a modificação quando usado com "ToList", porque o Linq não é executado antes que os dados sejam necessários. De qualquer forma, a melhor solução é usar "foreach". No código a seguir, você pode ver:
Antes de "foreach", você também pode fazer uma seleção linq ...
fonte
Receberia o
item
, e então você poderia fazeritem.prop1=5;
para alterar a propriedade específica.Ou você deseja obter uma lista de itens do banco de dados e alterar a propriedade
prop1
de cada item da lista retornada para um valor especificado? Nesse caso, você poderia fazer isso (eu estou fazendo isso no VB porque eu o conheço melhor):(
list
conterá todos os itens retornados com suas alterações)fonte
for each
loop.Em 2020 eu uso o
MoreLinq
Pipe
método. https://morelinq.github.io/2.3/ref/api/html/M_MoreLinq_MoreEnumerable_Pipe__1.htmfonte
fonte