Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从asp.net中的另一个列表填充要列出的数据_C#_Asp.net_List - Fatal编程技术网

C# 从asp.net中的另一个列表填充要列出的数据

C# 从asp.net中的另一个列表填充要列出的数据,c#,asp.net,list,C#,Asp.net,List,我有一个动态存储数据库数据的列表 List<string> StoreData=new List<string>(); 例如,它的值可以是 10,1,100 9,2,200 10,2,700 8,3,600 8,2,100 8,1,500 现在我想循环浏览这个列表,需要创建另一个列表,它应该以下面的格式存储数据 8,100,500,600 9,0,200,0 10,100,700,0 也就是说,它应该按照MonthNumber和Categoryid的升序

我有一个动态存储数据库数据的列表

List<string> StoreData=new List<string>();
例如,它的值可以是

 10,1,100
 9,2,200
 10,2,700
 8,3,600
 8,2,100
 8,1,500
现在我想循环浏览这个列表,需要创建另一个列表,它应该以下面的格式存储数据

8,100,500,600
9,0,200,0
10,100,700,0

也就是说,它应该按照MonthNumber和Categoryid的升序存储数据。不需要存储类别ID。但是价格顺序应该基于Categoryid。

首先,您的输入非常奇怪,如果您有选择权,您可能不应该有一个字符串列表,以现在的方式表示您的数据

现在,为了从一种格式的数据转换为另一种格式,最好先解析数据并将其映射到一个能够很好地表示数据的数据结构,然后使用此数据结构将其格式化为您想要的任何格式

首先,我们将所有数据解析为一个新的
列表

var parsedList = inputList.Select(i => { 
    var splittedAndParsed = i.Split(",").Select(int.parse);
    return splittedAndParsed;
}); 
运行此操作后,
parsedList
将为每行数据包含一个新的
列表
,该列表保存该行每列的已解析整数值

现在,我们希望将这些数据存储到字典中,以便为id聚合所有价格和类别。为了存储类别和价格数据,我们将引入
class

public class Price {
    public int CategoryId { get; set; }
    public int Price { get; set; }
}
现在我们使用它来创建
字典

var dict = new Dictionary<int, List<Price>>();
parsedList.ForEach(pl => {
     if(!dict.ContainsKey(pl[0], new List<Price>())) {
          dict.Add(pl[0]);
     }

     dict[pl[0]].Add(new Price { CategoryId = pl[1], Price = pl[2] });
});

当类别列表没有3列时,这不会填充0,但您可以轻松添加这些列。

共享
Linq
唯一解决方案:

var result = StoreData.GroupBy(s => s.Split(',')[0])
    .Select(x => x.Key +"," + 
        string.Join(",", Enumerable.Range(1,3)
            .Select(r => x.FirstOrDefault(z => z.Split(',')[1] == r + "") != null ? 
                x.FirstOrDefault(z => z.Split(',')[1] == r + "")
                .Split(',')[2] : "0")));

为什么
9,0200,0
而不是
9200
9,0,0200
?那么,到目前为止你都做了哪些尝试?你开始创作了吗?@AlfieGoodacre StoreData列表包含92200个。其中2是类别ID。categoryid 1和3没有值。因此它应存储为零。9,0200,0井。将多个值存储到一列中并不是最佳做法。我想你应该检查一下你的数据库storage@user2431727当前位置另外,为了让我们花时间研究您的问题,我们想看看您做了哪些尝试。因为它不是一个代码编写服务。你对一些具体的问题有意见吗?
foreach(var kvp in dict) {
    var sorted = kvp.Value.Sort(p => p.Category);
    string write = $"{kvp.Key},;

    sorted.ForEach(s => write.Append($"{s},");

    Console.WriteLine(write);
}
var result = StoreData.GroupBy(s => s.Split(',')[0])
    .Select(x => x.Key +"," + 
        string.Join(",", Enumerable.Range(1,3)
            .Select(r => x.FirstOrDefault(z => z.Split(',')[1] == r + "") != null ? 
                x.FirstOrDefault(z => z.Split(',')[1] == r + "")
                .Split(',')[2] : "0")));