2016-07-25 33 views
0

我有2列的數據表:LINQ的表集團通過在每一列獲取Perecentage

GuitarBrand | Status 
--------------------- 
Fender  | Sold 
Fender  | In Stock 
Gibson  | In Stock 
Gibson  | In Stock 

我想寫一個LINQ查詢輸出

GuitarBrand | PercentSold | Sold/Total 
--------------------------------------- 
Fender  | 50%   | 1/2 
Gibson  | 100%   | 2/2 

這是我到目前爲止有:

var groupedtable = from b in table.AsEnumerable() 
    group b by b.Field<"GuitarBrand"> into g 
    select new (GuitarBrand = g.Key, Perecent = (float)g.Count()/(float)g.key) 

我從另一篇文章中得到的,但它甚至不接近工作,我得到一個無法轉換字符串浮動。我試過看其他帖子,但我找不到任何東西。

謝謝!

+0

嘗試'float.Parse(g.Count())'/'float.Parse(g.Count(g.key))' – din

+0

g.key是一個字符串,你不能用字符串分割數! –

回答

1

您可以使用下面的(希望言自明)查詢:

var groupedtable = 
    from b in table.AsEnumerable() 
    group b by b.Field<string>("GuitarBrand") into g 
    let Total = g.Count() 
    let Sold = g.Count(e => e.Field<string>("Status") == "Sold") 
    let SoldPercent = (float)Sold/(float)Total 
    select new 
    { 
     GuitarBrand = g.Key, 
     PercentSold = SoldPercent.ToString("p"), 
     TotalSold = Sold + "/" + Total 
    }; 
1

也許是這樣的!

var groupedtable = from b in table.AsEnumerable() 
    group b by b.Field<"GuitarBrand"> into g 
    select new { 
    GuitarBrand = g.Key, 
    Perecent = g.Count(x=>x.Status.Eguals("Sold")/(float)g.Count() 
    } 
0

像這樣的東西應該讓你開始。在你的問題中,你的輸出表是矛盾的。我假設你想要標記的數據。

public static void Main() 
{ 
    var guitars = new List<Guitar>() 
    { 
     new Guitar(){ Brand = "Fender", Status = Status.Sold }, 
     new Guitar(){ Brand = "Fender", Status = Status.InStock }, 
     new Guitar(){ Brand = "Gibson", Status = Status.InStock }, 
     new Guitar(){ Brand = "Gibson", Status = Status.InStock } 
    }; 

    var query = guitars 
        .GroupBy(guitar => guitar.Brand) 
        .Select(group => new 
        { 
         GuitarBrand = group.Key, 
         Sold = group.Where(guitar => guitar.Status == Status.Sold).Count(), 
         Total = group.Count() 
        }) 
        .Select(_ => new 
        { 
         _.GuitarBrand, 
         PercentSold = ((decimal)_.Sold/(decimal)_.Total) * 100, 
         SoldAndTotal = string.Format("{0}/{1}", _.Sold, _.Total) 
        }); 
} 

class Guitar { 
    public string Brand { get; set; } 
    public Status Status { get; set; } 
} 

enum Status { 
    Sold, 
    InStock 
}