2016-09-19 23 views
-1

すべての異なる行を取得しようとすると、linqを使用して複数のテーブルから情報を取得し、それぞれの製品に対して1行のデータしか返さないという問題があります。各製品LINQ複数の結合を持つ個別の行

最初のバージョンつかんで私が何をしたいの

select DISTINCT * from z_product as zp 
inner join orders_products op on zp.ProductId = op.products_id 
inner join products p on op.products_id = p.products_id 
inner join orders o on o.orders_id = op.orders_id 
inner join product_design d on d.products_id = p.products_id 
where tray = 35 
group by zp.Id 

種類は、MySQL Workbenchの全ての情報を 結果2つの製品を

セカンドバージョン

試みのために複数の行を返す加入情報を外側にグループ化せずに、しかし、私は必要なすべての列を一覧表示する必要があります。私はまだやりたいことはありません。

すべての列をリストする必要はありますか? LINQでこれを行うにはどうすればよいですか?私が何をしたいの

select ass.* from z_product as zass LEFT JOIN (SELECT zp.* from z_product as zp 
    left join orders_products op on zp.ProductId = op.products_id 
    left join products p on op.products_id = p.products_id 
    left join orders o on o.orders_id = op.orders_id 
    left join product_design d on d.products_id = p.products_id 
    left join orders_products_attributes a on a.orders_products_id = op.orders_id 
    group by zp.Id) ass 
    ON ass.Id = zass.Id 
    where zass.Tray=35 

種類、包括的な使用してMySQL Workbenchの全ての情報を 結果2つの製品を

what i do want

So i want to get something like this; 
[What i want in LINQ][1] 

Attempt version 1 in LINQ 

       var orderProducts = (from zp in SqlContext.z_product 
        join op in SqlContext.orders_products on zp.ProductId equals op.products_id 
        join p in SqlContext.products on op.products_id equals p.products_id 
        join o in SqlContext.orders on op.orders_id equals o.orders_id 
        join d in SqlContext.product_design on p.products_id equals d.products_id 
        join a in SqlContext.orders_products_attributes on op.orders_id equals 
        a.orders_products_id 
        where zp.Tray == SelectedTray.Id 
        group new Product 
        { 
         OrdersProduct = op, 
         Product = p, 
         Order = o, 
         AreaProduct = zp, 
         ProductDesign = d, 
         OrdersProductsAttributes = a, 
        } by zp.Id 
        into product 
        select product); 

what i dont want

試み? linq製品群を生産します。各グループにはオブジェクトのリストがあります。私はただ2つの製品がほしい。

2つのグループの各グループは、そのアイテムのリストです。私は2つの製品がほしいと思う。

+0

希望の結果を生成する動作中のSQLクエリがある場合は、そのクエリのみをポストしてください(そして、*を含むカラムエイリアスを必ず含めてください)。 ORM(LinqToSQL、EF(バージョン)、EF Coreなど)、モデルクラス、およびリレーションシップも指定します。 –

+0

どちらも正常に動作しますが、完全性は完全にはわかりません。私は関係のない既存のDBでEF6を使いたいです。 「*を含む列のエイリアス」とはどういう意味ですか?すべてがあります。 –

+0

@IvanStoevなぜ-1つの質問? ORMはここではC#式を使用しても問題ありません。エイリアスはすべてです。あなたの入力とマークダウンは無効ですか? –

答えて

0

回答:

だから、グループ内で.First()を使用して見つけました。

  var orderProducts = (from zp in SqlContext.product 
          join op in SqlContext.orders_products on zp.ProductId equals op.orders_products_id 
          join p in SqlContext.products on op.products_id equals p.products_id 
          join o in SqlContext.orders on op.orders_id equals o.orders_id 
          join d in SqlContext.product_design on p.products_id equals d.products_id 
          join a in SqlContext.orders_products_attributes on op.orders_id equals 
          a.orders_products_id 
          where zp.Tray == tray 
          group new Product 
          { 
           SiblingCount = (from oop in SqlContext.orders_products 
               where oop.orders_id == o.orders_id 
               select oop 
             ).Count(), 
           OrdersProduct = op, 
           Product = p, 
           Order = o, 
           AreaProduct = zp, 
           ProductDesign = d, 
           OrdersProductsAttributes = a, 
          } by zp.Id 
          into product 
          select product.First()); 

各グループから最初の要素を取得します。

関連する問題