C# 来自其他子行的父行中的LINQ更新值
对于表,我使用linq2sql和m_DateContext.Dates类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的行
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。