LINQ para DataSet, distinta por várias colunas
-
22-08-2019 - |
Pergunta
Só queria verificar se há maneira de fazer distinta por várias colunas. Agradecemos antecipadamente !!!
BTW, eu encontrei uma grande extensão LINQ aqui mas precisa de alguma orientação para usá-lo para várias colunas
Solução
Bem, você pode fazer a projeção em primeiro lugar:
var qry = db.Customers.Select(cust => new {cust.ID, cust.Name, cust.Region})
.Distinct();
Ou na sintaxe de consulta:
var qry = (from cust in db.Customers
select new {cust.ID, cust.Name, cust.Region}).Distinct();
que fazem?
Outras dicas
Em vez de diferentes que você pode usar GroupBy e selecionando o mais alto registro de cada grupo
Como LINQ Distinct por Fields múltipla sem anônimo tipos
retorno de o em objEntity
group o by new { o.Field1, o.Field2, o.Field3, o.Field4, o.Field5 } into grp select grp.FirstOrDefault();
Isto lhe dará o EntityObject Ao invés de o AnonymousType
Por "distinta por várias colunas" o que você realmente quer dizer é um grupo de.
Quando você pedir distinta, isso significa que você está recebendo todas as linhas distintas, ou, um grupo usando todas as colunas na tabela.
Se você quiser obter apenas agrupamentos distintos para um subconjunto das colunas, em seguida, usar um grupo por sua cláusula, especificando as colunas a agrupar. Em seguida, selecione os grupos, como você só quer um conjunto de chaves para cada grupo.
Outra opção fácil é criar uma única corda distinto.
var result = collection.DistinctBy(c => c.Field1 + "." + c.Field2 + "." + c.Field3);
var query = (de cisto no db.Customers selecionar nova {cust.ID, cust.Name, cust.Region}). GroupBy (x => new {x.Name, x.Region}). Select (z => z.OrderBy (i => i.cust) .FirstOrDefault ()) ToList ();.