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

Foi útil?

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 ();.

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