当我应用.Distinct时,我的列表翻转每行的值?

时间:2014-02-13 16:52:11

标签: c# linq

var gridInfo = (from leader in db.LeaderAdminAccesses
                join emp in db.Employees
                on leader.ID equals emp.DPSID
                select new { ID = leader.ID, NAME = emp.FirstName + " " + emp.LastName }).Distinct();



var temp = gridInfo.Select(x => new List<string> { x.ID, x.NAME }).ToArray();

当我在gridInfo之前查看temp(在调试器中)时,我看到如下列表:

  

0 {ID =&#34; 123&#34;,NAME =&#34; John Smith&#34;}

     

1 {ID =&#34; 234&#34;,NAME =&#34; Jane Doe&#34;}

当我查看temp时,我看到它是这样的吗?

  

[0]计数= 2

    [0] "123"
    [1] "John Smith"
     

[1]数= 2

    [0] "Jane Doe"
    [1] "234"

我应该注意,如果我遗漏.Distinct()

,就不会发生这种情况

为什么这样做?我该怎么办,所以它不会像这样回来?

1 个答案:

答案 0 :(得分:2)

您的查询正在作为SQL语句执行。如果没有order-clause,则行的顺序在任何SQL语句中都不是确定性的。您可能希望使用内存中的数据进行此类后处理。

var temp = gridInfo.AsEnumerable().Select(x => new List<string> { x.ID, x.NAME }).ToArray();

AsEnumerable()表示您希望在内存中处理查询的其余部分,而不是SQL语句。