我猜之前有人问过这个问题,但我没有找到任何好的例子。我有这个问题。
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.AddedDate
与 EF.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/