0

私はLINQに必要な方法で機能する次のSQLクエリを実現しようとしています。グループの価格が個々の価格よりも高い場合は、参加して製品を選択する 2 つの個別の SQL クエリがあります。オブジェクトに LINQ を使用しており、購入テーブルと製品テーブル用のオブジェクト ファクトリがあります。

select DISTINCT(a.Name) from
(select p.Prod_ID, p.Name, SUM(p.Price) as Total
from Tb_AvailableProduct p, Tb_Purchases o
where p.Prod_ID = o.Prod_ID
group by p.Prod_ID, p.Name) a
JOIN
(select p.Prod_ID, p.Price
from Tb_AvailableProduct p, Tb_Purchases o
where p.Prod_ID = o.Prod_ID) b
on a.Prod_ID = b.Prod_ID
where a.Total > b.Price

Linq でこの最初のクエリを実行しましたが、製品のグループ価格が製品の個別価格よりも大きい場合にのみ、製品名を選択したいと考えています。つまり、複数の製品が販売されています。カウントを使用せずに合計でこれを達成しようとしています。

from o in this.myObjectFactory.ThePurchases
join p in this.myObjectFactory.TheProducts.Values
on o.ProductID equals p.ProductID
where o.CustomerID == customer.CustomerID
group p by p.ProductID into query1
select new { ProductID = query1.Key, TotalPurchasesThisYear = query1.Sum (p => p.Price)});
4

1 に答える 1

1

このようなものはおそらくうまくいくはずです(SQLクエリと非常に似ています):

var result = 
    from a in
        (
            from p in TheProducts
            join o in ThePurchases
            on p.ProductID equals o.ProductID
            group p by new { p.ProductID, p.Name, p.Price } into g
            select new
            {
                ProductID = g.Key.ProductID,
                Name = g.Key.Name,
                Total = g.Sum(i => i.Price)
            }
        )
    join b in
        (
            from p in TheProducts
            join o in ThePurchases
            on p.ProductID equals o.ProductID
            select new
            {
                ProductID = p.ProductID,
                Price = p.Price
            }
        )
    on a.ProductID equals b.ProductID
    where a.Total > b.Price
    select a.Name;

result = result.Distinct();
于 2012-12-11T08:51:08.497 に答える