小编典典

Linq。从多个表中选择

sql

在项目中,我有此表:

  1. 产品(id,catalogId,制造商ID …)
  2. 目录
  3. 制造商

还可以做Product模特(id, name, catalogId, catalogTitle, manufacturerId, manufacturerName)

如果要获取产品项,如何在Linq下面的SQL查询中编写代码?

SELECT Product.Name, Product.CatalogId, Product.ManufacturerId, [Catalog].Name, Manufacturer.Name
FROM Product, [Catalog], Manufacturer
WHERE [Catalog].Id=Product.CatalogId AND Manufacturer.id=Product.ManufacturerId AND Product.Active=1

阅读 194

收藏
2021-03-17

共1个答案

小编典典

首先,我会回答您的问题。然后解决您对评论的回答。要回答您的问题,请在Linq中执行以下操作:

from p in Product
join c in Catalog on c.Id equals p.CatalogId
join m in Manufacturer on m.Id equals p.ManufacturerId
where p.Active == 1
select new { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name };

这将为您提供一个带有所请求项目的匿名对象。如果您需要在其他地方使用它(并且您没有使用动态对象),建议您创建一个视图模型,并实例化其中的一个。

例子:

public class ProductInfoView 
{
     public string Name { get; set; }
     public int CatalogId { get; set; }
     public int ManufacturerId { get; set; }
     public string CatalogName { get; set; }
     public string ManufacturerName { get; set; }
}


from p in Product
join c in Catalog on c.Id equals p.CatalogId
join m in Manufacturer on m.Id equals p.ManufacturerId
where p.Active == 1
select new ProductInfoView() { Name = p.Name, CatalogId = p.CatalogId, ManufacturerId = p.ManufacturerId, CatalogName = c.Name, ManufacturerName = m.Name };

这将使引用查询结果的痛苦减轻一些。

为了回答您的评论,如果您只想要产品,那么您将进行大量的联接。您的标准只能确保三件事

  1. 您产品的活动标志为1
  2. 您的产品已有目录条目
  3. 您的产品已有制造商条目

如果#2和#3是多余的,并且您不一定需要名称,则可以简单地执行以下操作:

from p in Product
where p.Active == 1
select p

如果产品是CRUD模型,则可以将其深层加载以包含制造商/目录信息,或使用上述视图模型。

祝你好运!

2021-03-17