第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Linq:GroupBy,Sum和Count

Linq:GroupBy,Sum和Count

當(dāng)年話(huà)下 2019-08-08 16:03:24
Linq:GroupBy,Sum和Count我有一系列產(chǎn)品public class Product {    public Product() { }    public string ProductCode {get; set;}    public decimal Price {get; set; }    public string Name {get; set;}}現(xiàn)在,我想根據(jù)產(chǎn)品代碼對(duì)集合進(jìn)行分組,并返回一個(gè)對(duì)象,其中包含每個(gè)代碼的名稱(chēng),數(shù)量或產(chǎn)品以及每個(gè)產(chǎn)品的總價(jià)格。public class ResultLine{    public ResultLine() { }    public string ProductName {get; set;}    public string Price {get; set; }    public string Quantity {get; set;}}所以我使用GroupBy按ProductCode進(jìn)行分組,然后計(jì)算總和并計(jì)算每個(gè)產(chǎn)品代碼的記錄數(shù)。這是我到目前為止:List<Product> Lines = LoadProducts();    List<ResultLine> result = Lines                 .GroupBy(l => l.ProductCode)                 .SelectMany(cl => cl.Select(                     csLine => new ResultLine                     {                         ProductName =csLine.Name,                         Quantity = cl.Count().ToString(),                         Price = cl.Sum(c => c.Price).ToString(),                     })).ToList<ResultLine>();由于某種原因,總和正確完成但計(jì)數(shù)始終為1。Sampe數(shù)據(jù):List<CartLine> Lines = new List<CartLine>();             Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });             Lines.Add(new CartLine() { ProductCode = "p1", Price = 6.5M, Name = "Product1" });             Lines.Add(new CartLine() { ProductCode = "p2", Price = 12M, Name = "Product2" });樣本數(shù)據(jù)的結(jié)果:Product1: count 1   - Price:13 (2x6.5)Product2: count 1   - Price:12 (1x12)產(chǎn)品1應(yīng)該有count = 2!我嘗試在一個(gè)簡(jiǎn)單的控制臺(tái)應(yīng)用程序中模擬這個(gè),但我得到以下結(jié)果:Product1: count 2   - Price:13 (2x6.5)Product1: count 2   - Price:13 (2x6.5)Product2: count 1   - Price:12 (1x12)產(chǎn)品1:應(yīng)該只列出一次...上面的代碼可以在pastebin上找到:http://pastebin.com/cNHTBSie
查看完整描述

3 回答

?
青春有我

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊

我不明白第一個(gè)“帶樣本數(shù)據(jù)的結(jié)果”來(lái)自哪里,但控制臺(tái)應(yīng)用程序中的問(wèn)題是您正在使用SelectMany查看每個(gè)組中的每個(gè)項(xiàng)目

我想你只想要:

List<ResultLine> result = Lines
    .GroupBy(l => l.ProductCode)
    .Select(cl => new ResultLine
            {
                ProductName = cl.First().Name,
                Quantity = cl.Count().ToString(),
                Price = cl.Sum(c => c.Price).ToString(),
            }).ToList();

使用First()此處獲取產(chǎn)品名稱(chēng)假設(shè)具有相同產(chǎn)品代碼的每個(gè)產(chǎn)品具有相同的產(chǎn)品名稱(chēng)。如評(píng)論中所述,您可以按產(chǎn)品名稱(chēng)和產(chǎn)品代碼進(jìn)行分組,如果任何給定代碼的名稱(chēng)始終相同,則會(huì)產(chǎn)生相同的結(jié)果,但顯然會(huì)在EF中生成更好的SQL。

我還建議你應(yīng)該分別更改QuantityPrice屬性intdecimal類(lèi)型 - 為什么使用字符串屬性顯然不是文本的數(shù)據(jù)?


查看完整回答
反對(duì) 回復(fù) 2019-08-08
?
侃侃無(wú)極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

以下查詢(xún)有效。它使用每個(gè)組來(lái)進(jìn)行選擇而不是SelectMany。SelectMany適用于每個(gè)集合中的每個(gè)元素。例如,在您的查詢(xún)中,您有2個(gè)集合的結(jié)果。SelectMany獲得所有結(jié)果,總共3個(gè),而不是每個(gè)集合。以下代碼適用于IGrouping選擇部分中的每個(gè)代碼,以使您的聚合操作正常工作。

var results = from line in Lines
              group line by line.ProductCode into g              select new ResultLine {
                ProductName = g.First().Name,
                Price = g.Sum(_ => _.Price).ToString(),
                Quantity = g.Count().ToString(),
              };


查看完整回答
反對(duì) 回復(fù) 2019-08-08
  • 3 回答
  • 0 關(guān)注
  • 1946 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)