Linq和SQL之间的结果不同

时间:2013-09-25 01:04:18

标签: c# mysql .net linq

我不知道为什么我在这个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

.......

3 个答案:

答案 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();