0

Lightswitch LOANS(Id(default),..) と RELEASES(Id(default),Loan,..) に 2 つのテーブルがあります。保留中のすべてのローンをデータグリッドに表示する画面を作成したいので、作成しました。 wcf RIA クラス ライブラリです。まだリリースされていないすべてのローンを返したいのですが、そのための linq クエリは何でしょうか。私は他のSO投稿からこれを試しましたが、null参照例外が発生しました.Nullreference例外はユーザーコードによって処理されませんでした.オブジェクト参照がオブジェクトのインスタンスに設定されていません

ローンとリリースには 1 : 0/1 (1 つのローンと 0 または 1 つのリリース) の関係があります。ローンはゼロまたは 1 つの関係を持つことができます。リリースにはローンが必要です。

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

1 に答える 1

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

クエリ構文を使用する場合、これは事実上同じことです

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

}

ここで 1 つ言えることは、「AsQueryable」と言う前に PendingLoan に変換しているため、データ セットを既に列挙している (あるタイプのオブジェクトから別のタイプのオブジェクトに変換している) ということです。したがって、これには、「AsQueryable」部分から抜け出そうとする遅延バインディングと同じ利点はありません (既にデータベースに対して実行済みです)。すでに一度列挙したので、一部です。

于 2013-07-20T07:24:11.770 に答える