プロジェクトには次の表があります。
Product
モデル(id, name, catalogId, catalogTitle, manufacturerId, manufacturerName)
。
製品アイテムを取得したい場合、このSQLクエリをLinqでどのように記述できますか?
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
最初に、あなたの質問に答えます。次に、コメントへの答えに取り組みます。質問に答えるには、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 };
これにより、リクエストしたアイテムを含む匿名オブジェクトが作成されます。これを他の場所で使用する必要がある場合(動的オブジェクトを使用していない場合)、ビューモデルを作成し、選択したモデルの1つをインスタンス化することをお勧めします。
例:
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 };
これにより、クエリ結果を参照するのが少し楽になります。
あなたのコメントに答えるために、あなたが望むのが製品だけであるなら、あなたは多くの参加をしています。あなたの基準は3つのことだけを保証します
#2と#3が不要で、必ずしも名前が必要でない場合は、次のようにします。
from p in Product
where p.Active == 1
select p
製品がCRUDモデルである場合、潜在的にそれをディープロードしてメーカー/カタログ情報を含めるか、前述のビューモデルを使用できます。
幸運を!
明示的に結合せずに複数のテーブルの結果を結合するには:
from p in Product
from c in Catalog
from m in Manufacturer
where c.Id == p.CatalogId && m.Id == p.ManufacturerId && p.Active == 1
select new
{
p.Name,
p.CatalogId,
p.ManufacturerId,
c.Name,
m.Name
};