如何在LINQ to SQL中选择记录并且只选择具有最高日期的子记录

时间:2014-07-21 13:22:36

标签: c# linq linq-to-sql children

将表格“Person”包含在字段中:

IdPerson, Name, Description.

表格“FriendVisit”和

IdFriendVisit, Duration, TimeOfVisit, IdPerson

关系为1到n,其中1个人可以拥有n个FriendVisit。

我想让只有最后一次访问linq to sql statment的所有人。

像:

var allpersons = this.ObjectContext.Person.Include(p=>p.FriendVisit.OrderBy(fv => fv.TimeOfVisit).FirstOrDefault())

在Reality我只需要表FriendVisit的持续时间和表Person的名称,但我不知道这是否相关。

有某种形式的做法吗?

我想从孩子们那里搜索数据,然后把父母搞得一团糟......但是我想以“自然”的方式去做,给父母打电话,把孩子们搞定。

例如:

var allVisits = this.ObjectContext.FriendVisit.Include(p=>p.Persons).OrderBy(fv => fv.TimeOfVisit).FirstOrDefault())

1 个答案:

答案 0 :(得分:2)

你可以尝试这个:

查询语法

var allPersons = from p in this.ObjectContext.Person
                 join f in this.ObjectContext.FriendVisit
                 on p.IdPerson equals f.IdPerson
                 group by new { p, f }
                 select new 
                 {
                     Name = p.Name;
                     Duration = f.OrderBy(x=>x.TimeOfVisit).Last().Duration
                 };

流利语法

var allPersons = this.ObjectContext.Person.Join(this.ObjectContext.FriendVisit,
                                                x=>x.IdPerson,
                                                y=>y.IdPerson
                                                (x,y)=> new { x, y }
                                         ).GroupBy(z=>z)
                                          .Select(x=> new 
                                           {
                                               Name = p.Name;
                                               Duration = f.OrderBy(y=>y.TimeOfVisit)
                                                           .Last()
                                                           .Duration
                                           });