2013-03-29 3 views
0

'Personen'테이블에 대해 linq 쿼리를 실행하고 'Leners'테이블에 가입하려고합니다.
'Leners'테이블에서 가능한 경우 가장 최근 항목을 원합니다.LINQ가 최근 날짜가 람다에 합류합니다

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하여이 작업을 수행 할 수 있습니다 :이 같은 것을 할 것 SQL에서

? 선택에 따라 다르므로 람다 식에서이 작업을 수행하고 싶습니다. 그러나

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에 다시 할당 할 수 없습니다 :

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 쿼리를 찾아야한다 변하기 쉬운! 여기 Person 항목을 선택하고 있기 때문에

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

queryIQueryable<Person>입니다. 다시 할당하면 IQueryable<AnotherType>이 될 수 없습니다.

+0

Person (데이터베이스에 매핑되지 않음)에 Lener 유형의 추가 속성을 추가 할 수 있습니까? – r03

+0

예, 가능합니다. – MarcinJuraszek

+0

어떻게 할 수 있습니까? (in lambda) – r03

관련 문제