3

我在使用实体框架编写 linq 表达式时遇到了一些麻烦。我有两个相关的实体。Pago(支付)和Cuota(股票)。在 Cuota,我有 id_prestamo(贷款 ID)。

我需要的是为一笔 Prestamo(贷款)获得所有 Pago(付款)。但由于我的 Pago 仅与 Cuota 相关,因此我必须从 Cuota 获取 id_prestamo。问题是我无法像这样导航 throw 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 个参数”

有谁知道我怎样才能正确地写出这个表达式?

我附上下面的实体关系。

在此处输入图像描述

谢谢!

4

2 回答 2

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。)

于 2012-12-27T14:07:27.943 回答
1

你的 Prestamos 有 Cuotas(顺便说一下,Cuota 是分期付款,而不是 Share,share 是 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>();
于 2012-12-27T14:12:42.523 回答