web-dev-qa-db-fra.com

Sélectionnez Toutes les valeurs distinctes dans une colonne à l'aide de LINQ.

J'ai créé une API Web dans VS 2012 . J'essaie d'obtenir toute la valeur d'une colonne "Catégorie", c'est-à-dire toute la valeur unique, je ne veux pas que la liste soit renvoyée avec des doublons.

J'ai utilisé ce code pour obtenir des produits dans une catégorie particulière. Comment obtenir une liste complète des catégories (toutes les valeurs uniques dans la colonne Catégorie)?

public IEnumerable<Product> GetProductsByCategory(string category)
    {
        return repository.GetAllProducts().Where(
            p => string.Equals(p.Category, category, StringComparison.OrdinalIgnoreCase));
    }
30
Tester

Pour avoir des catégories uniques:

var uniqueCategories =  repository.GetAllProducts()
                                  .Select(p=>p.Category)
                                  .Distinct();
53
Alireza
var uniq = allvalues.GroupBy(x => x.Id).Select(y=>y.First()).Distinct();

Facile et simple

12
Dmitry Gribkov

Je dois trouver des lignes distinctes avec les détails suivants Class: Scountry
columns: countryID, countryName, isactive
Il n'y a pas de clé primaire dans ceci. J'ai réussi avec les requêtes suivantes

public DbSet<SCountry> country { get; set; }
    public List<SCountry> DoDistinct()
    {
        var query = (from m in country group m by new { m.CountryID, m.CountryName, m.isactive } into mygroup select mygroup.FirstOrDefault()).Distinct();
        var Countries = query.ToList().Select(m => new SCountry { CountryID = m.CountryID, CountryName = m.CountryName, isactive = m.isactive }).ToList();
        return Countries;
    }
1
Basant tiwari

Il est intéressant de noter que j'ai essayé les deux dans LinqPad et que la variante utilisant le groupe de Dmitry Gribkov par semble être plus rapide. (La distinction finale n’est pas requise non plus, car le résultat est déjà distinct.

Mon code (un peu simple) était:

public class Pair 
{ 
    public int id {get;set;}
    public string Arb {get;set;}
}

void Main()
{

    var theList = new List<Pair>();
    var randomiser = new Random();
    for (int count = 1; count < 10000; count++)
    {
        theList.Add(new Pair 
        {
            id = randomiser.Next(1, 50),
            Arb = "not used"
        });
    }

    var timer = new Stopwatch();
    timer.Start();
    var distinct = theList.GroupBy(c => c.id).Select(p => p.First().id);
    timer.Stop();
    Debug.WriteLine(timer.Elapsed);

    timer.Start();
    var otherDistinct = theList.Select(p => p.id).Distinct();
    timer.Stop();
    Debug.WriteLine(timer.Elapsed);
}
0
Drew