我有这种情况。
用户安排特定日期的客户访问。例如。: USER1将在DATE1上访问CUSTOMER1
模型是这样的:|客户| 1 --- * |访问|
相关模型是这样的:
public class Visit
{
public int VisitID { get; set; }
public int User { get; set; }
public int DateScheduled { get; set; }
public int CustomerID { get; set; }
}
我尝试使用LINQ而不是一堆列表和嵌套的ForEach是显示由USER分组的访问信息,显示计划在某一时间段内访问的客户。我需要显示这样的信息:
答案 0 :(得分:1)
我不知道这是否会因为Date内容而直接对数据库起作用,但是这样的东西应该对内存中的集合起作用:
// Assuming Visits is an IEnumerable<Visit>
var userVisits = from v in Visits
group v by v.User into groupedVisits
select new { // AnonymousType1
User = groupedVisits.Key,
Visits = from gv in groupedVisits
group gv by gv.DateScheduled.Date into dateVisits
select new { // AnonymousType2
DateScheduled = dateVisits.Key,
Customers = from dv in dateVisits
select dv.CustomerId
}
}
这会给你,基本上是以下结构:
class AnonymousType1
{
public int User { get; set; }
public IEnumerable<AnonymousType2> { get; set; }
}
class AnonymousType2
{
public DateTime DateScheduled { get; set; }
public IEnumerable<int> Customers { get; set; }
}
和userVisits
将是IEnumerable<AnonymousType1>
我不确定你是如何避免在那里使用一些嵌套的foreach
语句来实际显示数据的。但是这应该以一种易于操作的格式向您提供数据。
注意:我认为上面提到的某些IEnumerable<>
类型可能实际上是IQueryable<>
或类似的。但这是伪代码,只是为了通过使用类似于上面的LINQ语句来说明你最终得到的粗略结构。