我在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>();
}
答案 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因为你已经列举了一次。