मेरे पास दो टेबल हैं:

tblBadge
-------
ID
Name

tblBadgeUsers
-------
BadgeID
UserID

एक उपयोगकर्ता के पास कई बैज हो सकते हैं, सभी संबंध SQL डेटाबेस में ठीक से स्थापित होते हैं।

मैं उन बैज की कुल संख्या के साथ, उपयोगकर्ता के पास मौजूद सभी बैज की एक सूची वापस करने का प्रयास कर रहा हूं। यह लगभग है जहाँ तक मैं प्राप्त कर सकता हूँ, मैं बहुत भ्रमित हो रहा हूँ। मैं एक अतिरिक्त कॉलम के साथ tblBadge डेटा वापस करना चाहता हूं, जिसमें दिए गए बैज का कुल योग दिखाया गया है।

यह काम नहीं करता है लेकिन मेरा प्रयास है:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), Record = c.tblBadge });
2
Tom Gullen 18 अक्टूबर 2011, 00:51

1 उत्तर

सबसे बढ़िया उत्तर

यह देखते हुए कि एक बैज केवल में वास्तव में एक बैज आईडी और एक उपयोगकर्ता होता है, ऐसा लगता है कि आपको उपयोग के लिए बस बैज आईडी और उस बैज की गिनती प्राप्त करने की आवश्यकता है - जिसका अर्थ है कि केवल कुंजी प्राप्त करना समूह:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), BadgeId = c.Key });

यदि प्रत्येक बैज के बारे में अधिक जानकारी है, तो आप यह करना चाहेंगे:

var q = db.tblBadgeUsers
    .Where(c => c.UserID == UserID)
    .GroupBy(c => c.BadgeID)
    .Select(c => new { BadgeCount = c.Count(), BadgeId = c.Key, Badges = c });

तब आप कर सकते थे:

foreach (var badgeType in q)
{
    Console.WriteLine("{0}: {1}", badgeType.BadgeId, badgeType.BadgeCount);
    foreach (var badge in q.Badges)
    {
        // Deal with the badge information
    }
}
3
Ken Pespisa 18 अक्टूबर 2011, 01:11