LINQ问题有明显的计数

时间:2011-03-16 18:55:29

标签: .net linq linq-to-sql distinct

试图理解什么是错的,但我真的不能这样做。所以:

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 个答案:

答案 0 :(得分:4)

问题是IEqualityComparer无法转换为SQL。

尝试替换

.Distinct(new WordsInDictionaryDistinct())

.Select(x => x.idword).Distinct()

答案 1 :(得分:0)

我认为您最好将查询更改为群组而不是现在的方式,您也可能会获得更好的效果。

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()
        });