2013-07-20 27 views
0

我在lightswitch貸款(Id(默認),..)和RELEASES(Id(默認),貸款,..)中有兩個表。我想創建一個包含所有未決貸款的屏幕將顯示在datagrid.so我創建了一個wcf RIA類庫。我wanto返回所有沒有發佈的貸款。什麼將是linq查詢。 我試過從其他SO帖子,但它給了一個空引用exception.Null引用異常未處理的用戶代碼。對象引用未設置爲對象的實例Linq查詢獲取所有待處理的貸款

貸款發佈有1:0/1(一貸零或一個釋放)關係 一個貸款可以有零或一個relationship.a發佈必須有一個貸款。

[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?您是否在發佈版本上創建了關係?如果你建立了關係,你不需要Join,並且Lightswitch幾乎可以處理這樣一個簡單的查詢,而不需要編寫人工查詢。這個查詢沒有什麼意義,說實話你要求退還貸款,但然後規定只有空貸款 –

+0

@MarkHomer Homer我編輯添加關係信息如何建議在lightswitch中這樣做的簡單方法。 –

+0

已經有一段時間了,因爲我使用LightSwitch的時候沒有安裝它,但是我不會爲你做這個。我認爲在這一點上更好的方法是閱讀數據庫並設計你的表格和關係。在這裏毫無意義的複製和粘貼查詢。 –

回答

0

試試這個,這是LINQ,但使用lambda表達式,而不是查詢語法

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

如果你想使用的查詢語法這實際上是相同的事情

[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(); 

} 

現在我要說的一件事是,因爲在你說「AsQueryable」之前你轉換爲PendingLoan,你已經列舉了你的數據集(從一種類型的對象轉換爲另一種類型)。因此,這對於您可能試圖擺脫「AsQueryable」部分(您已經針對數據庫執行)的後期綁定沒有同樣的好處,所以您最好只返回一個IEnumerable並忘記AsQueryable因爲你已經枚舉了一次。

+0

我只是試過,但得到錯誤(紅色下劃線)l =>!l.Releases.Any()表示委託'系統Func '沒有采取一個參數 –

+0

basicallly它說不包含ANY的定義() –

+0

@ Rakon_188你使用實體框架或LINQ SQL或其他?此外,如果你可以編輯你的問題來添加你的數據結構(你的表格和他們的主鍵) – nerdybeardo