我有一個C#的對象列表,我需要進行透視和轉換。但我不知道如何獲得理想的結果。下面的代碼討論了結構,數據和期望的結果。我知道,我需要先對這些數據進行分組,然後進行轉換。但我很困惑如何實現它。在C中旋轉多列#
class Program
{
static void Main(string[] args)
{
List<Rev> revList = new List<Rev>();
Rev r = new Rev { Id = 1, Name = "One", Rank = 1, Region = "Global", Revenue = 600 }; revList.Add(r);
r = new Rev { Id = 1, Name = "One", Rank = 1, Region = "USA", Revenue = 100 }; revList.Add(r);
r = new Rev { Id = 1, Name = "One", Rank = 1, Region = "Euro", Revenue = 200 }; revList.Add(r);
r = new Rev { Id = 1, Name = "One", Rank = 1, Region = "APAC", Revenue = 300 }; revList.Add(r);
r = new Rev { Id = 2, Name = "Two", Rank = 2, Region = "Global", Revenue = 500 }; revList.Add(r);
r = new Rev { Id = 2, Name = "Two", Rank = 2, Region = "USA", Revenue = 100 }; revList.Add(r);
r = new Rev { Id = 2, Name = "Two", Rank = 3, Region = "APAC", Revenue = 400 }; revList.Add(r);
r = new Rev { Id = 3, Name = "Three", Rank = 2, Region = "Global", Revenue = 300 }; revList.Add(r);
r = new Rev { Id = 3, Name = "Three", Rank = 2, Region = "USA", Revenue = 100 }; revList.Add(r);
r = new Rev { Id = 3, Name = "Three", Rank = 3, Region = "Euro", Revenue = 200 }; revList.Add(r);
//Should result in THIS IS THE HARD CODED RESULT WHICH TRANFORM FUNCTION SHOULD GENERATE
List<RevExtended> resultList = new List<RevExtended>();
RevExtended res = new RevExtended{Name = "One", Id = 1, APACRevenue = 300, ApacRank = 1, EuroRank = 1, EurpRevenue = 200, GlobalRank = 1, GlobalRevenue = 600, USARank = 1, USARevenue = 100};
res = new RevExtended { Name = "Two", Id = 2, APACRevenue = 400, ApacRank = 3, GlobalRank = 2, GlobalRevenue = 500, USARank = 2, USARevenue = 100 };
res = new RevExtended { Name = "Three", Id = 3, EuroRank = 3, EurpRevenue = 200, GlobalRank = 2, GlobalRevenue = 300, USARank = 2, USARevenue = 100 };
}
public List<RevExtended> Transform(List<Rev> revList)
{
List<RevExtended> resultList = new List<RevExtended>();
var query = from rev in revList
group rev by rev.Id into revGroup
return resultList;
}
}
public class Rev
{
public string Name { get; set; }
public int Id { get; set; }
public int? Revenue { get; set; }
public int? Rank { get; set; }
public string Region { get; set; }
}
public class RevExtended
{
public string Name { get; set; }
public int Id { get; set; }
public int? GlobalRevenue { get; set; }
public int? GlobalRank { get; set; }
public int? USARevenue { get; set; }
public int? USARank { get; set; }
public int? EurpRevenue { get; set; }
public int? EuroRank { get; set; }
public int? APACRevenue { get; set; }
public int? ApacRank { get; set; }
}
謝謝你的快速幫助。這很棒。當排名或收入不適用於任何地區時,當前顯示爲0,我如何將其設置爲空? – OpenStack
@OpenStack刪除'??新的Rev()'從所有'let'行開始,然後在'select'內使用'g?.Revenue','g?.Rank'等。 –