我不知道为什么我在这个SQL和LINQ之间得到不同的结果 你能告诉我为什么......?
SQL:
select distinct top 50 (id) as d_id
from talbe1
where id<>-1
order by d_id asc;
的LINQ:
IList<int> myResults =
(from t in dbconn.table1
where t.id != -1
orderby t.id ascending
select t.id
).Distinct().Take(50).ToList();
int callCnt = 0;
foreach (int row in myResults)
{
callCnt++;
Console.WriteLine(callCnt.ToString() + " " + row.ToString() );
}
SQL得到我想要的结果, 但Linq的结果如下:
1 72662
2 84945
3 264577
4 77655
5 71756
6 76899
7 76719
8 77669
9 152211
10 79168
11 72334
12 71399
13 246031
14 80748
15 77715
.......
答案 0 :(得分:3)
这是LINQ to SQL的限制,OrderBy()
必须在Distinct()
之后发生,请尝试:
IList<int> myResults =
(from t in dbconn.table1
where t.id != -1
select t.id
).Distinct().OrderBy(t => t).Take(50).ToList();
答案 1 :(得分:3)
问题在于Distinct()
方法的工作方式。不幸的是,它可以(并且通常会)更改列表中项目的顺序。您需要在调用Distinct()
之后订购列表。
试试这个:
IList<int> myResults =
(
from t in dbconn.table1
where t.id != -1
select t.id
).Distinct().OrderBy(i => i).Take(50).ToList();
答案 2 :(得分:0)
尝试
var myResults = dbconn.Table1.Where(e => e.id != -1).Select(e => e.id).Distinct()
.OrderBy(t => t).Take(50).ToList();