Опитвам се да направя linq заявка на маса "Personen" и да се присъедини към таблицата "Leners".
От таблицата "Leners" бих желал най-новия елемент, ако има такъв.
В SQL ще направя така:
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)
Как мога да направя това с linq? Бих искал да направя това в ламбда, защото зависи от селекцията.
using (var db = new DbContext())
{
var query = from p in db.Personen
select p;
if (someSelection != null)
{
query = ?
}
}
Това са таблиците: (първо 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; }
}
Отговори:
3 за отговор № 1Вашата LINQ заявка трябва да изглежда така:
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 }
Не можете обаче да го присвоите на вашето query
променлива!
var query = from p in db.Personen
select p;
query
е IQueryable<Person>
защото избирате Person
тук. Не можете да го замените отново IQueryable<AnotherType>
.