c# - C# 中 LINQ 查询的奇怪结果

标签 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”传递到查询中,我希望看到上面的列表,但它不会生成所有列表。它可能会生成 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

然后取(2)

Andy Smith
Andy Bloggs

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

相关文章:

c# - 将 Entity Framework 4.1 数据库迁移到 EF5 进行升级,为新安装创建新数据库

c# - 赢 8/WP 8 : MMVM Framework?

java - Aspose LINQ 文本修剪

asp.net - 两个 namespace 之间的模糊引用

c# - 使用字段名称作为字符串调用 OrderBy()

C# 根据用户输入的范围检查数字列表

c# - 为什么我的性能计数器值会在应用程序终止时重置?

c# - 获取具有部分加载的集合的 Entity Framework 对象

linq - Linq 查询的这一部分叫什么?

c# - 从变量使用 OLE DB 源命令的 EzAPI 等价物是什么?