0

我在 lightswitch LOANS(Id(default),..) 和 RELEASES(Id(default),Loan,..) 中有两个表。我想创建一个屏幕,所有待处理的贷款都显示在 datagrid.so 我创建一个 wcf RIA 类库。我要返回所有尚未发布的贷款。对此的 linq 查询是什么。我从其他 SO 帖子中尝试过,但它给出了空引用异常。用户代码未处理空引用异常。对象引用未设置为对象实例

Loan to Release 有 1 : 0/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,但使用 lambdas 而不是查询语法

[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部分,因为您已经枚举过一次。

于 2013-07-20T07:24:11.770 回答