c# - 使用 LINQ GroupBy() 从数据库获取唯一项目的强类型列表

标签 c# linq entity-framework group-by

如何使用 LINQ 最好通过 GroupBy() 获取唯一项的列表?

这将是我的尝试:

public IEnumerable<Owner> GetAll(int userId)
{
    return _dbContext.Owners.Where(x => x.UserId == userId)
        .GroupBy(p => p.Text).Select(x => new Owner()).ToList();
}

但这给我带来了这个运行时错误:

The entity or complex type 'CentraVent.Data.Owner' cannot be constructed in a LINQ to Entities query.

我不得不说这是我的众多尝试之一。我只能找到返回匿名类型的示例。对于强类型对象如何做到这一点?

编辑具有唯一的所有者列表,我的意思是基于Text列。因此,Text 列中的记录不应具有相同的值。我得到哪个重复项并不重要。

所有者表具有以下字段:

  • 身份证
  • 文字
  • 颜色
  • 用户 ID

最佳答案

如果您希望每个唯一的 Text 值的哪个 Owner 并不重要,那么您可以只获取第一个

public IEnumerable<Owner> GetAll(int userId)
{
    return _dbContext.Owners.Where(x => x.UserId == userId)
        .GroupBy(p => p.Text).Select(x => x.FirstOrDefault()).ToList();
}

关于c# - 使用 LINQ GroupBy() 从数据库获取唯一项目的强类型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28995605/

相关文章:

c# - 从 Blazor 基类中的应用设置获取值

c# - 将 XPath 转换为 LINQ

xml - 根据同胞的值选择 XML 元素

c# - 应用程序内的 SQLite 文件版本兼容性

c# - 从数据库获取Guid

c# - 如何在不需要任何外部连接的 WPF 应用程序中创建内部数据库?

c# - 解释委托(delegate)调用的语法 C#

c# - C# 控制台应用程序之间的共享功能

c# - 是否可以自动为 SQL Server 和 LINQ to SQL 中的所有表名添加前缀?

c# - "IN"Linq 运算符