【发布时间】:2018-04-09 04:40:01
【问题描述】:
我有一个包含用户信息的用户表。我有一个包含产品信息的产品表。我有一个名为 UserProduct 的表,它充当联结表,其字段是 UserId 和 ProductId。我正在使用实体框架数据库第一方法。
我想使用 Linq 进行外连接以查找以下数据。
用户表中的所有用户。
所有购买了特定产品的用户,都使用名为 isPurchased 的布尔值。
我的想法是用 UserProduct 离开外部连接表 User 并获取所有用户以及他们是否有类似这样的产品。
var result = from a in Users
join b in UserProduct(Not available through EF) on a.Id equals b.prodId into group1
from g1 in group1.DefaultIfEmpty()
select new
{
id = g1.Id,
isPurchased = g1.prodId != null
}.ToList();
但是在 EF 映射中,没有创建对象 UserProduct,所以我不能直接在我的 Linq 查询中使用它?那么我该怎么做呢?有没有办法可以使用 linq 将表与实际表名 (UserProduct) 连接起来,而不是连接实体?
【问题讨论】:
-
我认为我们可能需要有关您的模型和表格名称的更多信息。例如,我猜
UserProduct是一个类型,而不是一个集合,这可能就是你的加入没有意义的原因。 -
如果你先做数据库,你需要去你的 edmx 文件。 (听起来像你)。确保 UserProduct 的对象在那里存在。如果它继续移动,如果不是右键单击设计表面并从数据库中添加它。如果它存在并且没有显示它应该在您的 *.tt 文件下的 edmx 文件下,只需通过右键单击正确的 tt 文件选择“运行自定义工具”,它应该会为您生成 POCO。
-
@djangojazz edmx 中没有 UserProduct 的对象,因为它是一个只有外键的表,所以不会有它的对象。
-
???你在问你是如何得到一些东西的,然后你就不需要它了。据我所知,您无法从实体框架中获得不存在的东西作为生成的 POCO。这就是实体框架的工作方式,这些就是实体。它们通常以 DbSet 的形式存在,然后是生成的 POCO,其属性与生成它的表相关。
-
如果你有一个联结表,你应该在代表联结表信息的
Users和Products对象中有List属性——你能发布你对Users和@的定义吗987654327@?您的示例代码也没有针对特定产品进行测试?
标签: c# entity-framework linq