LINQ Проблема с определенным количеством - PullRequest
0 голосов
/ 16 марта 2011

Пытаюсь понять, что не так, но я действительно не могу этого сделать. Итак:

return dc.dictionaries.Select(
       d => new AdminDictionaryViewModel 
       { dictionary = d,
         WordQuantity = dc.interpretations.Where(
                        i => i.iddictionary == d.iddictionary).Count() });

Это отлично работает, но если я перехожу на:

return dc.dictionaries.Select(
       d => new AdminDictionaryViewModel
       { dictionary = d,
         WordQuantity = dc.interpretations.Where(
                        i => i.iddictionary == d.iddictionary)
                       .Distinct(new WordsInDictionaryDistinct()).Count() });

И мой класс:

public class WordsInDictionaryDistinct : IEqualityComparer<interpretation>
{
    public bool Equals(interpretation x, interpretation y)
    {
        return x.idword.Equals(y.idword) && y.idword.Equals(x.idword);
    }

    public int GetHashCode(interpretation obj)
    {
        return obj.idword.GetHashCode();
    }
}

У меня есть:

dictionary table

iddictionary | dictionary_name

word table

idword | word_name

interpretation table

idinterpretation | iddictionary | idword

И мне нужно иметь просто отличное idword в каждом словаре, bcz, если я вернусь в моем первом запросе, может быть около 10 слов с idword = 15, но это одно слово, а не 15:

таблица интерпретации

idinterpretation | iddictionary | idword | meaning
1                   1              1115     hello
2                   1              1115     hi
3                   1              1115     hi, bro
4                   1              1116     
5                   1              1118     good bye
6                   1              1118     bye-bye
7                   2
8                   2

После второго запроса я надеюсь, что получу {d = 1, WordQuantity = 3}, но есть

Неподдерживаемая перегрузка, используемая для оператора запроса 'Distinct'.

Я пробовал

.ToList<interpretation>().Distinct(new WordsInDictionaryDistinct()).Count()

но все та же ошибка.

Действительно, не знаю, что делать: (

Ответы [ 2 ]

4 голосов
/ 16 марта 2011

Проблема в том, что IEqualityComparer невозможно преобразовать в SQL.

Попробуйте заменить

.Distinct(new WordsInDictionaryDistinct())

на

.Select(x => x.idword).Distinct()
0 голосов
/ 16 марта 2011

Я думаю, вам лучше поменять запрос на группу, чем сейчас, вероятно, вы также получите лучшую производительность.

return (from d in dc.dictionaries
        join i in dc.interpretations on d.iddictionary == i.iddictionary
        group i by d into g
        select AdminDictionaryViewModel()
        {
            dictionary = g.Key,
            WorkQuantity = g.Distinct(o => o.idword).Count()
        });
...