Linq to sql LINQ连接和组
如何展开此查询:Linq to sql LINQ连接和组,linq-to-sql,join,group-by,Linq To Sql,Join,Group By,如何展开此查询: public Dictionary<int, List<TasksInDeal>> FindAllCreatedTasks() { return (from taskInDeal in db.TasksInDeals where taskInDeal.Date > DateTime.Now && taskInDeal.Date < DateTime.Now.AddDays(7)
public Dictionary<int, List<TasksInDeal>> FindAllCreatedTasks()
{
return (from taskInDeal in db.TasksInDeals
where taskInDeal.Date > DateTime.Now && taskInDeal.Date < DateTime.Now.AddDays(7)
group taskInDeal by taskInDeal.CreatedByUserID
into groupedDemoClasses
select groupedDemoClasses).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
}
公共字典FindAllCreatedTasks()
{
返回(来自db.TasksInDeals中的taskInDeal)
其中taskInDeal.Date>DateTime.Now&&taskInDeal.Dategdc.Key,gdc=>gdc.ToList());
}
变成这样:
public Dictionary<int, List<TaskForNotification>> FindAllCreatedTasks()
{
return (from taskInDeal in db.TasksInDeals
join user in db.Users on taskInDeal.CreatedByUserID equals user.UserID
where taskInDeal.Date > DateTime.Now && taskInDeal.Date < DateTime.Now.AddDays(7)
group taskInDeal by taskInDeal.CreatedByUserID
into groupedDemoClasses
select new TaskForNotification
{
Email = user.Email,
TaskInDealField1 = taskInDeal.TaskInDealField1,
TaskInDealField2 = taskInDeal.TaskInDealField2,
TaskInDealField3 = taskInDeal.TaskInDealField3,
...
}
).ToDictionary(gdc => gdc.Key, gdc => gdc.ToList());
}
公共字典FindAllCreatedTasks()
{
返回(来自db.TasksInDeals中的taskInDeal)
在数据库中加入用户。taskInDeal.CreatedByUserID上的用户等于user.UserID
其中taskInDeal.Date>DateTime.Now&&taskInDeal.Dategdc.Key,gdc=>gdc.ToList());
}
因此,要进行第一次查询,我需要加入来自其他表的电子邮件。//预先执行日期逻辑,而不是在数据库中。
// do the date logic up front, not in the database.
DateTime now = DateTime.Now
DateTime weekFromNow = now.AddDays(7);
// pull the joined rows out of the database.
var rows =
(
from taskInDeal in db.TasksInDeals
where taskInDeal.Date > now && taskInDeal.Date < weekFromNow
join user in db.Users
on taskInDeal.CreatedByUserID equals user.UserID
select new {TaskInDeal = taskInDeal, UserEmail = user.Email}
).ToList();
// shape the rows in memory
Dictionary<int, List<TaskForNotification>> result =
(
from row in rows
let taskForNotification = new TaskForNotification
{
Email = row.UserEmail,
TaskInDealField1 = row.TaskInDeal.TaskInDealField1,
TaskInDealField2 = row.TaskInDeal.TaskInDealField2,
TaskInDealField3 = row.TaskInDeal.TaskInDealField3,
...
}
group taskForNotification by row.TaskInDeal.CreatedByUserID
// without an "into", group by ends the query.
).ToDictionary(g => g.Key, g => g.ToList());
DateTime now=DateTime.now
DateTime weekFromNow=now.AddDays(7);
//将连接的行从数据库中拉出。
变量行=
(
来自db.TasksInDeals中的taskInDeal
其中taskInDeal.Date>now&&taskInDeal.Dateg.Key,g=>g.ToList());
分组时,请记住这一点。SQL中的组只有键和聚合。LINQ中的组具有键、聚合和元素!如果您向数据库请求组,然后请求元素,那么SQL无法在单个查询中为您提供这些元素。您将使用组键作为筛选器自动重复查询。//预先执行日期逻辑,而不是在数据库中。
DateTime now=DateTime.now
DateTime weekFromNow=now.AddDays(7);
//将连接的行从数据库中拉出。
变量行=
(
来自db.TasksInDeals中的taskInDeal
其中taskInDeal.Date>now&&taskInDeal.Dateg.Key,g=>g.ToList());
分组时,请记住这一点。SQL中的组只有键和聚合。LINQ中的组具有键、聚合和元素!如果您向数据库请求组,然后请求元素,那么SQL无法在单个查询中为您提供这些元素。您将使用组键作为筛选器自动重复查询。简单问题-难以置信它已被保留了5个小时。简单问题-难以置信它已被保留了5个小时。