SORU
18 Ocak 2009, Pazar


Nasıl Yineleme Sayısı bu SERİ ile Listesinde

Öğelerin bir listesi var

  • John NUMARASI
  • Matt KİMLİĞİ
  • John NUMARASI
  • Scott KİMLİĞİ
  • Matt KİMLİĞİ
  • John NUMARASI
  • Lucas KİMLİĞİ

Onları geri de çiftleri en yüksek numarasına göre sıralamak istiyorum yani böyle bir liste içine sokmak istiyorum.

  • John NUMARASI 3
  • Matt NUMARASI 2
  • Scott KİMLİK Numarası 1
  • Lucas KİMLİK Numarası 1

Bana bunu daha ne kadar yapabilirim ETMENİZ ve C ile haber#.

Teşekkürler

2 Gösteren Kod DÜZENLE:

    List<game> inventory = new List<game>();
    drinkingforDataContext db = new drinkingforDataContext();
    foreach (string item in tbTitle.Text.Split(' '))
    {

        List<game> getItems = (from dfg in db.drinkingfor_Games
                               where dfg.game_Name.Contains(tbTitle.Text)
                               select new game
                               {
                                   gameName = dfg.game_Name,
                                   gameID = Boomers.Utilities.Guids.Encoder.EncodeURLs(dfg.uid)
                               }).ToList<game>();

        for (int i = 0; i < getItems.Count(); i  )
        {
            inventory.Add(getItems[i]);
        }
    }

    var items = (from xx in inventory
                 group xx by xx into g
                 let count = g.Count()
                 orderby count descending
                 select new
                    {
                        Count = count,
                        gameName = g.Key.gameName,
                        gameID = g.Key.gameID
                    });

    lvRelatedGames.DataSource = items;
    lvRelatedGames.DataBind();

Bu görüntüler bu sorgu sonuçlar:

  • 1 Merhaba Dünya kez
  • 1 Merhaba Dünya kez
  • 1 Merhaba Dünya.
  • 1 Merhaba Dünya kez
  • 1 Merhaba Dünya kez
  • 1 Merhaba Dünya kez
  • 1 Merhaba Dünya.
  • 1 Merhaba Dünya kez

Beni sayıp adını verir, ama bana oyun ID vermez....

Ekran:

  • Merhaba 6 kez dünya 234234
  • 2 Merhaba Dünya. 23432432

CEVAP
18 Ocak 2009, Pazar


Kullanabilirsiniz "grup" "". orderby Ayrıntılar için LINQ 101 bkz

var list = new List<string> {"a", "b", "a", "c", "a", "b"};
var q = from x in list
        group x by x into g
        let count = g.Count()
        orderby count descending
        select new {Value = g.Key, Count = count};
foreach (var x in q)
{
    Console.WriteLine("Value: "   x.Value   " Count: "   x.Count);
}

Yanıt this post (şimdi silinmiş):

Eğer bazı özel nesneler listesi varsa o zaman özel mülkiyet tarafından custom comparer veya grup kullanmanız gerekir.

Ayrıca sorgu sonucu gösteremiyor. Bize kod daha iyi bir yardım almak için tam gösteriyor.

Son güncelleme:

Bu kod satırı vardır:

group xx by xx into g

Xx beri nesne sistemi birbirine öğe karşılaştırmak için nasıl bilmiyor bir özel. Zaten yazdığı gibi, derleyici kılavuzu ve nesneler için bazı özellik karşılaştırma sağlamak veya özel karşılaştırıcısı sağlamak gerekir. İşte bir örnek:

Ben kullandığını unutmayınFoo.Adı- yani nesneler bir anahtar değere göre gruplandırılmış olacakAdıözellik.

Bir catch - 2 nesneleri çoğaltmak için tedavi adlarına göre var, ama Kimliği ne olacak ? Benim örnekte ben sadece bir grupta ilk nesne Kimliği. Eğer nesneleri farklı Kimlikleri varsa, bir sorun olabilir.

//Using extension methods
var q = list.GroupBy(x => x.Name)
            .Select(x => new {Count = x.Count(), 
                              Name = x.Key, 
                              ID = x.First().ID})
            .OrderByDescending(x => x.Count);

//Using LINQ
var q = from x in list
        group x by x.Name into g
        let count = g.Count()
        orderby count descending
        select new {Name = g.Key, Count = count, ID = g.First().ID};

foreach (var x in q)
{
    Console.WriteLine("Count: "   x.Count   " Name: "   x.Name   " ID: "   x.ID);
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • apenney888

    apenney888

    27 EKİM 2010
  • H3Ctic (old channel)

    H3Ctic (old

    23 Mart 2011
  • NewsyTech

    NewsyTech

    2 AĞUSTOS 2010