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

Tri*_*ene 1 c# linq

这是我目前的LINQ查询:

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

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

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

  • 安迪史密斯
  • 安迪博格斯
  • 安迪道斯
  • 安迪萨顿

如果我将"Andy"一词传递给查询,我希望看到上面的列表,但它不会生成所有这些.它可能会产生安迪史密斯,安迪博格斯和失踪的安迪道斯和安迪萨顿.如果我通过"Andy Su"一词,它将按预期显示Andy Sutton.

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

xan*_*tos 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!
Run Code Online (Sandbox Code Playgroud)

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

说清楚:让我们说你有一个Take(2):

您对db的所有行的查询...

Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes
Run Code Online (Sandbox Code Playgroud)

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

Andy Smith
Andy Smith
Run Code Online (Sandbox Code Playgroud)

申请Distinct()......

Andy Smith
Run Code Online (Sandbox Code Playgroud)

但实际上你想要:

获取数据库的所有行

Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes
Run Code Online (Sandbox Code Playgroud)

应用 Distinct()

Andy Smith
Andy Bloggs
Andy Dawes
Run Code Online (Sandbox Code Playgroud)

然后 Take(2)

Andy Smith
Andy Bloggs
Run Code Online (Sandbox Code Playgroud)