Linq查询获取所有待处理的贷款

时间:2013-07-20 07:20:59

标签: c# linq left-join wcf-ria-services lightswitch-2012

我在lightswitch LOANS(Id(默认),...)和RELEASES(Id(默认),Loan,..)中有两个表。我想创建一个屏幕,其中包含要在数据网格中显示的所有待处理贷款。所以我创建了一个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>();
    }

1 个答案:

答案 0 :(得分: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因为你已经列举了一次。