c# - 我可以在 Entity Framework 核心和 linq 中编写查询时的案例吗?

标签 c# entity-framework linq

我的查询如下,(postgresql)

  SELECT split_part(grp.agerange, '*',2) as age_range,
         round(sum(salary)) AS total
  FROM
   (
       SELECT salary,
              CASE
                  WHEN(date_part('year', age(birth_date)) >  0  AND date_part('year', age(birth_date)) <= 8)   THEN  '0 - 8 age'
                  WHEN(date_part('year', age(birth_date)) >  8  AND date_part('year', age(birth_date)) <= 16)   THEN '8 - 16 age'
                  WHEN(date_part('year', age(birth_date)) >  16  AND date_part('year', age(birth_date)) <= 24)   THEN '16 - 24 age'
                  WHEN(date_part('year', age(birth_date)) >  24)  THEN '24 < age'   ELSE 'Unknown'
               END as agerange
       FROM sde.employee
    ) grp
  GROUP BY grp.agerange
  ORDER BY grp.agerange;

那么我可以使用 linq 在 Entity Framework 核心 3.0 Employee 模型中创建查询吗?

public class Employee{
   public string Id {get;set;}
   public string Name {get;set;}
   public decimal Salary {get;set;}
   public DateTime? BirthDate {get;set;}
}

从我的数据库上下文中:

var grouped = _context.Employees.Group(????

Birthdate 是 Nullable 类型。

最佳答案

您可以只使用条件运算符 ? 或 Select 语句中的 if 语句,然后按该结果分组....

var grouped = _context.Employees
    .Select(e => new { AgeRange = e.birth_date.Year > 24 ? "24 < age" : etc.});
    .Group(e => e.AgeRange);

关于c# - 我可以在 Entity Framework 核心和 linq 中编写查询时的案例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60618680/

相关文章:

C# - 让您的桌面应用程序在特定网页中打开系统浏览器

c# - C# 中的 TimeSpan "pretty time"格式

c# - DbContext 是一项昂贵的操作吗?

c# - 如何根据第一个列表匹配检索子字符串

c# - LINQ 问题 : Unable to cast object of type 'System.Reflection.Module' to type 'System. Reflection.Emit.ModuleBuilder

c# - 如何使用 LINQ 查找第一次出现

c# - LINQ 如何获取一条记录并跳过其余的 c#

c# - C# 中的优化技术

c# - 使用 SelectMany 和 GroupBy

c# - Entity Framework Code First 一对一关系