web-dev-qa-db-ger.com

Wählen Sie mit LINQ Alle unterschiedlichen Werte in einer Spalte aus

Ich habe in VS 2012 eine Web-API erstellt. Ich versuche, den gesamten Wert aus einer Spalte "Kategorie" abzurufen, das ist der eindeutige Wert. Ich möchte nicht, dass die Liste mit Duplikaten zurückgegeben wird.

Ich habe diesen Code verwendet, um Produkte einer bestimmten Kategorie zu erhalten. Wie erhalte ich eine vollständige Liste von Kategorien (Alle eindeutigen Werte in der Kategoriespalte)?

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

Um einzigartige Kategorien zu haben:

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

Einfach und einfach

12
Dmitry Gribkov

Ich muss eindeutige Zeilen mit den folgenden Details finden Klasse: Scountry
Spalten: countryID, countryName, isactive
Hierin liegt kein Primärschlüssel. Die folgenden Abfragen sind mir gelungen

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

Interessanterweise habe ich beide in LinqPad ausprobiert und die Variante mit der Gruppe von Dmitry Gribkov scheint schneller zu sein. (Auch das endgültige Unterscheidungsmerkmal ist nicht erforderlich, da das Ergebnis bereits eindeutig ist.

Mein (etwas einfacher) Code war:

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