2013-07-20 7 views
0

나는 lightswitch LOANS (ID (기본값), ..) 및 RELEASES (ID (기본값), Loan ..) 테이블에 두 개의 테이블을 보유하고 있습니다. datagrid.so에 표시되도록해야합니다. wcf RIA 클래스 라이브러리를 만들었습니다 .i wanto 아직 릴리스가없는 모든 대출을 반환합니다. 그 것에 대한 linq 쿼리가 될 것입니다. 다른 SO 게시물에서 이것을 시도했지만 null 참조 예외가 발생했습니다 .Nullreference 예외가 사용자 코드에 의해 처리되지 않았습니다. 객체 참조가 객체 인스턴스로 설정되지 않았습니다.모든 보류 대출을 얻는 Linq 쿼리

Loan to Release는 1 : 0/1 0 또는 하나의 릴리스) 관계 대출에는 0 개 또는 1 개의 관계가있을 수 있습니다. 릴리스에는 대출이 있어야합니다. 이 같은 일을 효율적으로 이제

[Query(IsDefault = true)] 
public IQueryable<PendingLoans> GetPendingLoans() 
{ 
    var res = from l in this.context.Loans 
       where !l.Releases.Any() 
       select new PendingLoans { BillNo = l.BillNo }; 
    return res.AsQueryable(); 

} 

인 쿼리 구문을 사용하려면

[Query(IsDefault = true)] 
    public IQueryable<PendingLoans> GetPendingLoans() 
    { 
     var res = from l in this.context.Loans 
        join r in this.context.Releases 
        on l equals r.Loan 
        where r.Loan == null 
        select new PendingLoans { BillNo = l.BillNo }; 
     return res.AsQueryable<PendingLoans>(); 
    } 
+0

어떻게하면 아무도 당신이 테이블 정의를 제공하지 않을 때 대답 할 수 있습니다. 모든 열/관계를 나열해야합니다. 왜 릴리즈에는 Id와 ReleaseId가 있습니까? 릴리스에 관계를 만들었습니까? 관계를 설정하지 않으면 조인이 필요하지 않으며 Lightswitch는 이와 같은 간단한 쿼리를 처리해야합니다. 그 쿼리는 당신이 대출을 돌려 줄 것을 요구하고 있지만 정당한 것은 NULL이 아니라는 것을 정직하게 말하는 것은 의미가 없습니다. NULL Loan –

+0

@MarkHomer Homer 나는 lightswitch에서 이것을하기 쉬운 방법을 제안하는 관계 정보를 추가하기 위해 편집했습니다. –

+0

LightSwitch를 사용 했으므로 한동안 사용하지 않았지만 어쨌든이 작업을 수행하지는 않습니다. 이 시점에서 더 나은 접근법은 데이터베이스에 대한 독서와 테이블 및 관계 설계입니다. 무의미한 복사 및 붙여 넣기 쿼리. –

답변

0

이보십시오,이 LINQ하지만 람다 대신 쿼리 구문

[Query(IsDefault = true)] 
public IQueryable<PendingLoans> GetPendingLoans() 
{ 
    var res = this.context.Loans.Where(l=>!l.Releases.Any()).Select(l=> new PendingLoans { BillNo = l.BillNo }).AsQueryable(); 
    return res; 
} 

을 사용하고 내가 말하고자하는 한가지는 "AsQueryable"이라고하기 전에 PendingLoan으로 변환하기 때문에 이미 데이터 세트를 열거했다는 것입니다 (한 유형의 객체에서 다른 유형으로 변환). 그러므로 이것은 당신이 "AsQueryable"부분 (당신은 이미 db에 대해 실행했습니다.)에서 벗어나려고 시도 할 수있는 후기 바인딩의 이점을 가지지 않으므로 IEnumerable을 반환하고 AsQueryable을 잊어 버리는 것이 더 나을 수도 있습니다 당신이 이미 한 번 열거했기 때문에 부분.

+0

방금 ​​시도했지만 오류 (빨간색 밑줄 표시) l =>! l.Releases.Any() 대리자 'System Func '은 하나의 인수를 사용하지 않는다는 것을 의미합니다. –

+0

basicallly에는 ANY() –

+0

@ Rakon_188 Entity Framework 또는 linq를 SQL 또는 다른 것으로 사용하고 있습니까? 또한 데이터 구조 (테이블 및 기본 키)를 추가하기 위해 질문을 편집 할 수 있다면 – nerdybeardo