C#中使用LINQ查询的奇怪结果

时间:2015-03-17 11:23:01

标签: c# linq

这是我当前的LINQ查询:

  var model =
  db.RPTINQUIRies
    .Where(t => t.CONNAME.StartsWith(term))
    .Take(25)
    .Select(t => new
{
  label = t.CONNAME
}).Distinct();

CONNAME是指联系人姓名,例如" Andy Smith"。我选择的是不同的,因为可能有100行" Andy Smith"英寸

让我们说一些不同的名字如下:

  • 安迪史密斯
  • Andy Bloggs
  • Andy Dawes
  • Andy Sutton

如果我通过了这个术语" Andy"进入查询我希望看到上面的列表,但它不会生成所有这些。它可能会产生安迪史密斯,安迪博格斯和失踪的安迪道斯和安迪萨顿。如果我通过术语" Andy Su"它会像预期的那样展示Andy Sutton。

任何人都可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:8)

尝试移动Take(25)

var model =
    db.RPTINQUIRies
        .Where(t => t.CONNAME.StartsWith(term))
        .Select(t => new
        {
            label = t.CONNAME
        })
        .Distinct()
        .Take(25); // Move it HERE!

您需要25个不同的名称,而不是SQL在数据库中找到的前25个名称的不同名称: - )

说清楚:假设你有一个Take(2)

您对db ...

的所有行的查询
Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes

然后你Take(2) ......

Andy Smith
Andy Smith

并申请Distinct() ...

Andy Smith

但实际上你想要:

获取db

的所有行
Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes

申请Distinct()

Andy Smith
Andy Bloggs
Andy Dawes

然后Take(2)

Andy Smith
Andy Bloggs