【问题标题】:Split a entity collection into n parts将实体集合拆分为 n 个部分
【发布时间】:2012-05-09 20:34:55
【问题描述】:

我有一个数据库表。

  • 首先,我想按日期时间分组。
  • 然后我只想选择有 n 个项目的组。

我的班级是这样的:

public class VisitDate
{
  public int Id {get;set;}
  public int VisitMeDate {get;set;}
  .....
  .....
}

我的 SQL 表如下:

Id   Date
--- -----------------------
136 2012-05-09 10:00:00.000
167 2012-05-09 12:00:00.000
137 2012-05-10 10:00:00.000
168 2012-05-10 12:00:00.000
194 2012-05-10 14:00:00.000
138 2012-05-11 10:00:00.000
169 2012-05-11 12:00:00.000
195 2012-05-11 14:00:00.000
139 2012-05-12 10:00:00.000
170 2012-05-12 12:00:00.000
196 2012-05-12 14:00:00.000
140 2012-05-13 10:00:00.000
171 2012-05-13 12:00:00.000
197 2012-05-13 14:00:00.000
141 2012-05-14 10:00:00.000
142 2012-05-15 10:00:00.000
172 2012-05-15 12:00:00.000
143 2012-05-16 10:00:00.000
173 2012-05-16 12:00:00.000
144 2012-05-17 10:00:00.000
174 2012-05-17 12:00:00.000
198 2012-05-17 14:00:00.000

我想像下面这样转换:

List<List<MyEntity>> = ?;

137 2012-05-10 10:00:00.000
168 2012-05-10 12:00:00.000
194 2012-05-10 14:00:00.000

138 2012-05-11 10:00:00.000
169 2012-05-11 12:00:00.000
195 2012-05-11 14:00:00.000

139 2012-05-12 10:00:00.000
170 2012-05-12 12:00:00.000
196 2012-05-12 14:00:00.000

140 2012-05-13 10:00:00.000
171 2012-05-13 12:00:00.000
197 2012-05-13 14:00:00.000

144 2012-05-17 10:00:00.000
174 2012-05-17 12:00:00.000
198 2012-05-17 14:00:00.000

我试过这个:

List<List<VisitDate>> dates = dbContext.VisitDates.GroupBy(f => new { f.VisitMeDate }).ToList();

但它不能编译,我不知道怎么说我只想要三个元素的组。

【问题讨论】:

  • 我已经编辑了您的问题以使其更清楚。如果我在理解您的问题时出现错误,请再次编辑以修复错误。
  • 谢谢@MarkByers,我会试试你的代码。

标签: c# .net linq entity-framework entity-framework-4


【解决方案1】:

试试这样的:

var result = dbContext.VisitDates
                      .GroupBy(x => x.VisitMeDate.Date)
                      .Where(g => g.Count() == 3)
                      .Select(g => g.ToList())
                      .ToList();

【讨论】:

  • 它没有用,因为从 2012-05-09 10:00:00.000 到 2012-05-09 0:00:00.000 的 VisitMeDate 列的格式不是这样关于纯 t-sql 语法 SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @your_date)) 我如何将此语法转换为 linq 语法?
  • @tobias:我在答案中添加了.Date
  • 哦,这么简单,为什么我想这么复杂:)
  • 我尝试了您的代码,但出现错误,LINQ to Entities 不支持指定的类型成员“日期”。仅支持初始化器、实体成员和实体导航属性。
  • @tobias:EF 好像不支持DateTime.Date。这个thread 建议改用EntityFunctions.TruncateTime(x.VisitMeDate)。虽然没试过。如果这不起作用,您可以尝试按年、月、日分组。
猜你喜欢
  • 1970-01-01
  • 2010-10-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-12
  • 2013-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多