簡體   English   中英

LINQ加入lambda,並提供最新日期

[英]LINQ join in lambda with most recent date

我正在嘗試對表'Personen'進行linq查詢,並聯接表'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做到這一點? 我想在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; }
}

您的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM