2

我不知道为什么我在这个 SQL 和 LINQ 之间得到不同的结果你能告诉我为什么......?

SQL:

select distinct top 50 (id) as d_id
from talbe1
where id<>-1
order by d_id  asc;

林克:

    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

.......
4

3 回答 3

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();
于 2013-09-25T01:10:42.970 回答
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();
于 2013-09-25T01:11:55.283 回答
0

尝试

var myResults = dbconn.Table1.Where(e => e.id != -1).Select(e => e.id).Distinct()
         .OrderBy(t => t).Take(50).ToList();
于 2013-09-25T01:14:00.107 回答