1

私はLINQでこれをやろうとしています:

select p.ProductID, p.ArticleCode, SUM((case h.OperationType when 0 then 1 else -1 end) * h.[Count])
from Products p
inner join StockItems s on p.ArticleCode = s.ArticleCode
inner join StockHistorical h on s.ArticleID = h.ArticleID
where h.[Date] < '23/08/2013 11:30:00'
group by p.ProductID, p.ArticleCode

私はこれを持っています:

        var products = (from p in e.Products
                        join s in e.StockItems on p.ArticleCode equals s.ArticleCode
                        join h in e.StockHistoricals on s.ArticleID equals h.ArticleID
                        where h.Date < DateTime.Parse("23/08/2013 11:30:00")
                        group p by p.ProductID into StockResult
                        select new {  });

誰でもどうすればいいのか知っています

SUM((case h.OperationType when 0 then 1 else -1 end) * h.[Count])

LINQで?

ありがとう!

StockResult グループの OperationType プロパティにアクセスできないため、問題は「グループ化」であることを忘れていました。

解決しました!キーは次のとおりです。

let combined = new 
{
    Product = p,
    HistoryCount = (h.OperationType == 0 ? 1 : -1) * h.Count
}
4

3 に答える 3

2
...
let combined = new 
{
    Product = p,
    HistoryCount = (h.OperationType == 0 ? 1 : -1) * h.Count
}
group combined by combined.Product.ProductID into StockResult
select new
{
    ProductID = StockResult.Key,
    Total = StockResult.Sum(x => x.HistoryCount)
}
于 2013-09-19T14:00:31.010 に答える
0

直訳ではありませんが、以下のように訳します。

(h.Count(his => his.OperationType != 0) 
    - h.Count(his => his.OperationType == 0))
    * h.Count()

機能的に同等である必要があり、やろうとしていることをよりよく表しているようです。

于 2013-09-19T14:00:38.953 に答える
0

あなたはこのようなことをしようとしていますか?これが機能するかどうかはわかりません。

select new
{
S=Sum(((h.OperationType)!=0?-1:1)*h.Count)
}
于 2013-09-19T14:03:44.100 に答える