0

テーブル '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でこれを行うにはどうすればよいですか? 選択に依存するため、ラムダ式でこれを行いたいと思います。

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; }
}
4

1 に答える 1

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;

queryここでアイテムIQueryable<Person>を選択しているためです。Personに再割り当てすることはできませんIQueryable<AnotherType>

于 2013-03-29T12:47:06.513 に答える