浏览where子句中的实体

时间:2012-12-27 12:59:38

标签: c# entity-framework where

我在使用实体框架编写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句子。我明白了:

enter image description here

“代表不接受1个参数”

有人知道我怎么能写这个表达吗?

我附上下面的实体关系。

enter image description here

谢谢!

2 个答案:

答案 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>();