LINQ从子行中更新父行中的值

时间:2010-08-05 14:51:24

标签: c# linq linq-to-sql

我对表使用linq2sql和 m_DateContext.Dates

ID | ParentID | Datestamp
---|----------|----------
1  | NULL     | 1.8.2010
---|----------|----------
2  | 1        | 2.8.2010
---|----------|----------
3  | 1        | 4.8.2010

等...

我需要编写linq查询以仅选择ParentID为 NULL 的行(例如:ID = 1),但是DATESTAMP的值必须等于其子行的最大日期。 (行ID = 3)。

Linq查询必须返回m_DateContext.Dates的实例,其中包含指向数据库模式中实体的非断开链接。

结果必须像:

ID = 1 ParentID=NULL Datestamp = 4.8.2010

请帮忙

3 个答案:

答案 0 :(得分:2)

var rows =
(
from parent in db.Dates
where parentId == null
let MaxDate = parent.Dates.Max(child => child.DateStamp)
select new{DateObject = parent, MaxDate = MaxDate}
)

List<Date> result = new List<Date>();
foreach(var row in rows)
{
  Date d = row.DateObject;
  d.DateStamp = row.MaxDate;
  result.Add(d)
}

答案 1 :(得分:1)

所有类型的假设(linq to entity或sql)我认为你想要一个让...

var query = (
     from i in TDates
        where i.ParentID==null
     let maxDate= TDates.Max(d=>d.Datestamp) 
     select new {
       NonBrokenRecord = i,
       Datestamp = maxDate
     }

).ToList();

一旦你得到了结果,你就可以......

query.ForEach(x=>x.NonBrokenRecord.DateStamp = x.Datestamp);
query = query.Select(x=>x.NonBrokenRecord).ToList();

答案 2 :(得分:1)

var query = 
    from p in TDates 
    where p.ParentID==null 
    select new TDate 
    { 
        ID = p.ID, 
        ParentID = null, 
        Datestamp = TDates.Where(c=> c.ParentID == p.ID).Max(c=>c.Datestamp)
    };