2013-03-29 74 views
0

我想要對錶'Personen'和加入表'Leners'做一個linq查詢。
從表'Leners'我想最近的項目,如果可用。LINQ加入lambda與最新日期

在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? 我想在lambda表達式中這樣做,因爲它取決於選擇。

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

你的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; 

queryIQueryable<Person>因爲你在這裏選擇Person項目。您不能將其重新分配爲IQueryable<AnotherType>

+0

如果我將一個Lener類型的額外屬性添加到Person(未映射到數據庫),是否可能? – r03

+0

是的,這是可能的。 – MarcinJuraszek

+0

我該怎麼做? (在lambda中) – r03