C# 来自其他子行的父行中的LINQ更新值

C# 来自其他子行的父行中的LINQ更新值,c#,linq,linq-to-sql,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的行

对于表,我使用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
请帮助

所有类型的假设(linq到实体或sql),我认为您需要一个let

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();
各种各样的假设(linq到实体或sql),我认为您需要一个let

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();
var行=
(
来自数据库中的父项。日期
其中parentId==null
让MaxDate=parent.Dates.Max(child=>child.DateStamp)
选择新{DateObject=parent,MaxDate=MaxDate}
)
列表结果=新列表();
foreach(行中的变量行)
{
Date d=row.DateObject;
d、 DateStamp=row.MaxDate;
结果.添加(d)
}
var行=
(
来自数据库中的父项。日期
其中parentId==null
让MaxDate=parent.Dates.Max(child=>child.DateStamp)
选择新{DateObject=parent,MaxDate=MaxDate}
)
列表结果=新列表();
foreach(行中的变量行)
{
Date d=row.DateObject;
d、 DateStamp=row.MaxDate;
结果.添加(d)
}

您是否使用linq创建实体?物体?SQL?请给我们一些无类..Thanx,更新。我使用linq2sql。您使用linq访问实体吗?物体?SQL?请给我们一些无类..Thanx,更新。我使用linq2sql.OK,但在您的示例中,我丢失了数据库模式-Dtable.OtherEntity.fieldvalues中所有linket实体之间的连接。您需要将此添加到问题中。请详细说明您的意思。如果我正确理解,Datestamp将是总体上最高的日期戳,而不是child.ParentId=parentidOK的最高日期戳,但在您的示例中,我断开了数据库模式-Dtable.OtherEntity.FieldValues中所有linket实体之间的连接。您需要将此添加到您的问题中。请详细说明你的意思。如果我正确地理解了这一点,Datestamp将是整体上最高的日期戳,而不是child.ParentId=ParentId的最高值。这是我没有得到的,ParentId将始终为空?因此,您的邮戳代码将始终返回所有空ParentID的最大值?@Nix:此表(我假设)本身具有外键关系,其中child.ParentID==Parent.ID。现在,将查询绘制为两个独立的表。所以,ParentID在父记录上总是空的,但在父记录的子记录上它不是空的。我想说的是你的子句。其中(c=>c.ParentID==p.ID)与p.ParentID==null冲突,你将始终有。其中(c=>c.ParentID==null)@Nix:没有冲突。记住,我说,这是两张分开的桌子。Datestamp使用一个单独的查询,与外部查询的唯一连接是p.ID。这是我没有得到的,ParentID将始终为null?因此,您的邮戳代码将始终返回所有空ParentID的最大值?@Nix:此表(我假设)本身具有外键关系,其中child.ParentID==Parent.ID。现在,将查询绘制为两个独立的表。所以,ParentID在父记录上总是空的,但在父记录的子记录上它不是空的。我想说的是你的子句。其中(c=>c.ParentID==p.ID)与p.ParentID==null冲突,你将始终有。其中(c=>c.ParentID==null)@Nix:没有冲突。记住,我说,这是两张分开的桌子。日期戳使用单独的查询,与外部查询的唯一连接是p.ID。