Click here to Skip to main content
15,887,135 members
Home / Discussions / C#
   

C#

 
AnswerRe: moving slideshow Pin
User 48350473-Jul-14 9:22
User 48350473-Jul-14 9:22 
QuestionMongo DB Projection from C# Pin
Ennis Ray Lynch, Jr.3-Jul-14 8:22
Ennis Ray Lynch, Jr.3-Jul-14 8:22 
AnswerRe: Mongo DB Projection from C# Pin
Richard Deeming3-Jul-14 8:47
mveRichard Deeming3-Jul-14 8:47 
GeneralRe: Mongo DB Projection from C# Pin
Ennis Ray Lynch, Jr.3-Jul-14 9:20
Ennis Ray Lynch, Jr.3-Jul-14 9:20 
QuestionInternet Cafe Management System Pin
Abdul-Qaadir2-Jul-14 10:14
Abdul-Qaadir2-Jul-14 10:14 
AnswerRe: Internet Cafe Management System Pin
Eddy Vluggen2-Jul-14 12:39
professionalEddy Vluggen2-Jul-14 12:39 
QuestionCannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer' because it is not a delegate type Pin
caguas2-Jul-14 7:04
caguas2-Jul-14 7:04 
AnswerRe: Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer' because it is not a delegate type Pin
Richard Deeming2-Jul-14 9:42
mveRichard Deeming2-Jul-14 9:42 
As you've found, the built-in Distinct extension method[^] doesn't provide an overload which compares objects by a property. You'll need to roll your own:
C#
using System;
using System.Collections.Generic;

public static class SetExtensions
{
    private static IEnumerable<TSource> DistinctByIterator<TSource, TKey>(
        IEnumerable<TSource> source, 
        Func<TSource, TKey> keySelector, 
        IEqualityComparer<TKey> keyComparer)
    {
        var knownKeys = new HashSet<TKey>(keyComparer);
        try
        {
            foreach (var item in source)
            {
                if (knownKeys.Add(keySelector(item)))
                {
                    yield return item;
                }
            }
        }
        finally
        {
            // HACK: Avoid iterator memory leak described at:
            // http://msmvps.com/blogs/jon_skeet/archive/2011/01/18/gotcha-around-iterator-blocks.aspx
            knownKeys = null;
        }
    }
    
    public static IEnumerable<TSource> DistinctBy<TSource, TKey>(
        this IEnumerable<TSource> source, 
        Func<TSource, TKey> keySelector, 
        IEqualityComparer<TKey> keyComparer = null)
    {
        if (source == null) throw new ArgumentNullException("source");
        if (keySelector == null) throw new ArgumentNullException("keySelector");
        return DistinctByIterator(source, keySelector, keyComparer);
    }
}


With that in place, you can update your query to use the new method:
C#
var topRatedProducts = (from product in _container.Products.Include("ProductReviews")
                        orderby product.ProductReviews.Average((x) => x.StarRate) descending
                        select product).DistinctBy(y => y.ProductName);




"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer


GeneralRe: Cannot convert lambda expression to type 'System.Collections.Generic.IEqualityComparer' because it is not a delegate type Pin
caguas3-Jul-14 6:46
caguas3-Jul-14 6:46 
QuestionHow to solve (Use of unassigned local variable) Pin
Jassim Rahma2-Jul-14 0:25
Jassim Rahma2-Jul-14 0:25 
AnswerRe: How to solve (Use of unassigned local variable) Pin
Pete O'Hanlon2-Jul-14 0:43
mvePete O'Hanlon2-Jul-14 0:43 
GeneralRe: How to solve (Use of unassigned local variable) Pin
Jassim Rahma2-Jul-14 0:54
Jassim Rahma2-Jul-14 0:54 
AnswerRe: How to solve (Use of unassigned local variable) Pin
Shameel2-Jul-14 1:01
professionalShameel2-Jul-14 1:01 
GeneralRe: How to solve (Use of unassigned local variable) Pin
Pete O'Hanlon2-Jul-14 1:11
mvePete O'Hanlon2-Jul-14 1:11 
Questioncode Pin
Member 109187741-Jul-14 23:34
Member 109187741-Jul-14 23:34 
AnswerRe: code Pin
V.1-Jul-14 23:46
professionalV.1-Jul-14 23:46 
AnswerRe: code Pin
Pete O'Hanlon2-Jul-14 0:23
mvePete O'Hanlon2-Jul-14 0:23 
AnswerRe: code Pin
Yang Kok Wah2-Jul-14 7:30
Yang Kok Wah2-Jul-14 7:30 
QuestionC# Printer Status Pin
Zeyad Jalil1-Jul-14 22:06
professionalZeyad Jalil1-Jul-14 22:06 
AnswerRe: C# Printer Status Pin
Duncan Edwards Jones1-Jul-14 22:20
professionalDuncan Edwards Jones1-Jul-14 22:20 
AnswerRe: C# Printer Status Pin
Kornfeld Eliyahu Peter1-Jul-14 22:21
professionalKornfeld Eliyahu Peter1-Jul-14 22:21 
Questionc# to control microphone volume Pin
NAVIN KUMAR RAMASWAMY1-Jul-14 4:08
NAVIN KUMAR RAMASWAMY1-Jul-14 4:08 
AnswerRe: c# to control microphone volume Pin
Pete O'Hanlon1-Jul-14 4:24
mvePete O'Hanlon1-Jul-14 4:24 
Questionself destructible message Pin
abhisince941-Jul-14 3:32
abhisince941-Jul-14 3:32 
AnswerRe: self destructible message Pin
joost.versteegen1-Jul-14 3:41
joost.versteegen1-Jul-14 3:41 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.