/ / LINQ vstúpiť do lambda s najnovším dátumom - c #, linq, entita-framework, lambda, ef-code-first

LINQ pripojiť lambda s najnovším dátumom - c #, linq, entity-framework, lambda, ef-code-first

Ja sa snažím urobiť linq dotaz na tabuľku "Personen" a pripojiť sa k tabuľke "Leners".
Z tabuľky "Leners" by som chcel najnovšiu položku, ak je k dispozícii.

V SQL by som to urobil takto:

select p.*, l.*
from dbo.Personen p
left outer join dbo.Leners l on l.LenerId =
(select top 1 LenerId
from dbo.Leners lt
where lt.PersoonId = p.PersoonId
order by lt.Vanaf desc)

Ako to môžem urobiť s linq? Chcel by som to urobiť v lambda výraze, pretože to závisí od výberu.

using (var db = new DbContext())
{
var query = from p in db.Personen
select p;

if (someSelection != null)
{
query = ?
}
}

Toto sú tabuľky: (prvý kód EF)

[Table("Personen")]
public class Persoon
{
[Key]
public int PersoonId { get; set; }

[StringLength(50)]
[Required]
public string Naam { get; set; }
}

[Table("Leners")]
public class Lener
{
public int LenerId { get; set; }

public int? PersoonId { get; set; }

[ForeignKey("PersoonId")]
public virtual Persoon Persoon { get; set; }

public DateTime Vanaf { get; set; }
}

odpovede:

3 pre odpoveď č. 1

Váš dopyt LINQ by mal vyzerať takto:

var query2 = from p in dbo.Personen
let l = dbo.Leneren
.OrderByDescending(lt => lt.Vanaf)
.FirstOrDefault(lt => lt.PersoonId == p.PersoonId)
select new { p, l }

Nemôžete ho však priradiť späť query Premenná!

var query = from p in db.Personen
select p;

query je IQueryable<Person> pretože si znovu vyberiete Person položky tu. Nemôžete ho znovu priradiť IQueryable<AnotherType>.