首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DISTINCT与Linq2SQL问题

DISTINCT与Linq2SQL问题
EN

Stack Overflow用户
提问于 2011-03-20 15:27:08
回答 1查看 387关注 0票数 0

我有一张这样的桌子:

代码语言:javascript
复制
idinterpretation | iddictionary | idword | meaning
1                   1              1115     hello
2                   1              1115     hi
3                   1              1115     hi, bro
5                   1              1118     good bye
6                   1              1118     bye-bye
7                   2              1119     yes 
8                   2              1119     yeah
9                   2              1119     all rigth

我试着得到不同的行(不同的虚词)。所以,一开始我试着:

代码语言:javascript
复制
return dc.interpretations.Where(i => i.iddictionary == iddict).
    ToList<interpretation>().Distinct(new WordsInDictionaryDistinct()).
    OrderBy(w => w.word.word1).Skip(iSkip).Take(iTake);

但是我的表中有大约300.000行,这是错误的解决方案。

然后,我试着:

代码语言:javascript
复制
    IEnumerable<interpretation> res = (from interp in dc.interpretations
                                      group interp by interp.idword into groupedres
                                      select new interpretation
                                      {
                                          idword = groupedres.Key,
                                          idinterpretation = groupedres.SingleOrDefault(i => i.idword == groupedres.Key).idinterpretation,
                                          interpretation1 = groupedres.SingleOrDefault(i => i.idword == groupedres.Key).interpretation1,
                                          iddictionary = groupedres.SingleOrDefault(i => i.idword == groupedres.Key).iddictionary
                                      }).Skip(iSkip).Take(iTake);

我犯了错误:@foreach (interpretation interp in ViewBag.Interps) System.NotSupportedException: Explicit construction of entity type 'vslovare.Models.interpretation' in query is not allowed.

这真的是一种获取不同行并在最后一行中使用的方法吗?

代码语言:javascript
复制
idinterpretation | iddictionary | idword | meaning
1                   1              1115     hello
5                   1              1118     good bye
7                   2              1119     yes 

字典:

代码语言:javascript
复制
dictionary table

iddictionary | dictionary_name

文字:

代码语言:javascript
复制
word table

idword | word_name

解释:

代码语言:javascript
复制
interpretation table

idinterpretation | iddictionary | idword | meaning
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-20 16:31:36

我认为您的第二次尝试即将完成--您可能需要使用GroupBy子句才能在SQL中工作。

类似于:

代码语言:javascript
复制
var query = from row in dc.interpretations
            where row.iddictionary == iddict
            group row by idword into grouped
            select grouped.FirstOrDefault();

return query.OrderBy(w => w.word.word1).Skip(iSkip).Take(iTake);

关于查询时间太长的原因--通常情况下,如果查询速度慢,这将是因为您正在搜索和返回的数据非常大--或者因为它在数据库级别的索引很差。为了帮助查找,它正在分析或分析您的查询--请参阅本文在MSDN http://msdn.microsoft.com/en-us/magazine/cc163749.aspx上的内容。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5369406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档