Значение обновления LINQ в родительских строках из дочерних строк - PullRequest
0 голосов
/ 05 августа 2010

Я использую 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 (ex: ID = 1), НО Значение DATESTAMP должно быть равно максимальной дате из его дочерних строк. (ID строки = 3).

Запрос Linq должен возвращать экземпляр m_DateContext.Dates с неразорванными ссылками на сущности в схеме базы данных.

Результат должен быть примерно таким:

ID = 1 ParentID=NULL Datestamp = 4.8.2010

Пожалуйста, помогите

Ответы [ 3 ]

2 голосов
/ 05 августа 2010
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 голос
/ 05 августа 2010
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)
    };
1 голос
/ 05 августа 2010

Все виды предположений (ссылки на сущности или 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...