c# - 部分 LINQ 查询分离方法 (EF Core)

标签 c# linq entity-framework-core

我猜之前有人问过这个问题,但我没有找到任何好的例子。我有这个问题。

series = await query
    .GroupBy(o => new { o.AddedDate.Date.Month, o.AddedDate.Date.Year })
    .Select(g => new DateLineGraphItem 
        { Legend = new DateTime(g.Key.Year, g.Key.Month, 1), Number = g.Count() })
    .ToListAsync();

除了我的数据库对所有“AddedDate”列有不同的名称之外,一切都是一样的,我正试图弄清楚如何将其分解成它自己的方法,就像这样。

List<DateLineGraphItem> series = GroupByAndSelect("AddedDate")
List<DateLineGraphItem> series = GroupByAndSelect("CreatedDate")

我是否必须使用表达式和谓词以及所有这些或者可以通过一些简单的方式来完成?

最佳答案

Do i have to use Expressions

使用表达式(整个 LINQ 都基于该概念)总是比使用魔术字符串更好。唯一的问题是,没有用于从其他表达式组合表达式的开箱即用的解决方案,因此您需要自己编写或使用第 3 方包。

从另一边看,nameof运算符消除了大部分 string缺点。 EF Core 提供了一个方便的方法,称为 EF.Property对于像这样的简单场景。

所以如果方法包含string propertyName指向类型直接属性的参数 DateTime , 你可以简单地替换 o.AddedDateEF.Property<DateTime>(o, propertyName) ,例如

series = await query
    .GroupBy(o => new { EF.Property<DateTime>(o, propertyName).Date.Month, EF.Property<DateTime>(o, propertyName).Date.Year })
    .Select(g => new DateLineGraphItem 
        { Legend = new DateTime(g.Key.Year, g.Key.Month, 1), Number = g.Count() })
    .ToListAsync();

关于c# - 部分 LINQ 查询分离方法 (EF Core),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57754511/

相关文章:

c# - 为什么要使用 SqlCommand.CommandType = StoredProcedure?

c# - 聚合根。兔子洞有多远

c# - TypeLoadException : Method 'Create' in type . ..没有实现(错误如下)

c# - Console.Write可删除字符

php - LINQ 表达式?

LINQ 查询具有 2 个集合的对象

c# - 如何比较 linq/lambda 查询中可空日期时间的日期部分?

c# - 如何使用 ef 为迁移构建强制执行 Restrict DeleteBehavior?

c# - 在 ASP.NET Core 中为每个 SQL 命令打开/关闭数据库

c# - 如何仅在TreeView中设置顶级项目的样式?