我在使用实体框架编写linq表达式时遇到了一些麻烦。我有两个相关的实体。 Pago(付款)和Cuota(股票)。在Cuota,我有id_prestamo(贷款ID)。
我需要的是获得一个Prestamo(贷款)的所有Pago(付款)。但由于我的Pago只与Cuota有关,我必须从Cuota获得id_prestamo。问题是我不能像这样导航Cuota:
Lista_pagos = db.Pago.Where(x => x.Cuota.Prestamo.id_prestamo == prestamo.id_prestamo).ToList();
我也试过这个表达式,但它也不起作用:
Lista_pagos = db.Pago.Where(x => x.Cuota.Where(y => y.Prestamo.id_prestamo == prestamo.id_prestamo)).ToList();
当我说它不起作用是因为我无法编译应用程序。这个地方x.Cuota.Where(y =>
一定有错误,但不知道如何正确使用where句子。我明白了:
“代表不接受1个参数”
有人知道我怎么能写这个表达吗?
我附上下面的实体关系。
谢谢!
答案 0 :(得分:1)
您的查询中存在语法错误。
db.Pago.Where()
...采用谓词 - 返回bool
的函数。
x.Cuota.Where()
...返回IQueryable<Cuota>
所以:
db.Pago.Where(x => x.Cuota.Where( ... ))
...是无效代码,因为IQueryable<Cuota>
不是bool
。
我认为你真正想要的是:
Lista_pagos = db.Pago.Where(
x => x.Cuota.Any(y => y.Prestamo.id_prestamo == prestamo.id_prestamo)
).ToList();
(注意Any
而不是Where
。)
答案 1 :(得分:1)
你有Prestamos的Cuotas(顺便说一句,Cuota是分期付款,不是分享,分享是Acción)你想要给定Prestamo的所有Pagos:
Lista_Pagos = (from p in Pagos
join c in Cuotas
on p.Cuota.Cuota_Id equals c.Cuota_Id
where c.Prestamo.Prestamo_Id == prestamo.Prestamo_Id
select p).ToList<Pago>();