这是我当前的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”一词传递到查询中,我希望看到上面的列表,但它不会生成所有列表。它可能会生成Andy Smith,Andy Bloggs,并且会丢失Andy Dawes和Andy Sutton。如果我通过“ Andy Su”一词,它将按预期显示Andy Sutton。

谁能阐明为什么会这样吗?

最佳答案

尝试移动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)

您查询数据库的所有行...

Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes


然后你Take(2) ...

Andy Smith
Andy Smith


并应用Distinct() ...

Andy Smith


但实际上您想要:

占用数据库的所有行

Andy Smith
Andy Smith
Andy Bloggs
Andy Dawes


申请Distinct()

Andy Smith
Andy Bloggs
Andy Dawes


然后Take(2)

Andy Smith
Andy Bloggs

关于c# - C#中使用LINQ查询的奇怪结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29097806/

10-10 19:02