我有一张这样的表:
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
我尝试获得不同的行(DISTINCT idword)。所以,起初我试过了:
return dc.interpretations.Where(i => i.iddictionary == iddict).
ToList<interpretation>().Distinct(new WordsInDictionaryDistinct()).
OrderBy(w => w.word.word1).Skip(iSkip).Take(iTake);
但是我的表中有大约300.000行,这是错误的解决方案。
然后,我试过了:
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.
它是否真的是一种获取不同行的方法,并且可以像这样完成行:
idinterpretation | iddictionary | idword | meaning
1 1 1115 hello
5 1 1118 good bye
7 2 1119 yes
字典:
dictionary table
iddictionary | dictionary_name
词:
word table
idword | word_name
解释
interpretation table
idinterpretation | iddictionary | idword | meaning
答案 0 :(得分:2)
我认为您的第二次尝试几乎就在那里 - 您可能需要使用GroupBy子句才能在SQL中使用它。
类似的东西:
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