如何在muliti-conditions C#中查询数组

时间:2016-03-20 14:16:12

标签: c# arrays

我有一个名为UsedCars [10,5]

的数组

它的数据看起来像

@PreAuthorize("#request.getRemoteAddr().equals(#request.getLocalAddr())")

我想得到每个汽车品牌相同颜色的总和 所以结果必须是

Car Brand       Car Color   Quantity
Alfa Romeo         Red         5
Dodge              Blue        1
Ferrari            Yellow      12
Dodge              Blue        3
Alfa Romeo         Red         5
Dodge              Red         18

我的想法是将所有这些来自UsedCars数组的数据添加到Datatable中然后我在DataTable中的所有行上进行循环,以在每一行上进行查询(select)并比较它的数据以求和数量并将它们全部放入数据表

减少资源使用和运行时间的任何简短方法?

2 个答案:

答案 0 :(得分:1)

您可以使用LINQ。示例来自:https://code.msdn.microsoft.com/LINQ-Aggregate-Operators-c51b3869

List<Product> products = GetProductList(); 

var categories = 
    from p in products 
    group p by p.Category into g 
    select new { Category = g.Key, TotalUnitsInStock = g.Sum(p => p.UnitsInStock) }; 

答案 1 :(得分:0)

我试图为你找到一个很好的LINQ实现,但似乎很难将多维数组(object[,])与LINQ结合起来,因为提供的枚举器遍历数组的每个“单元”。

所以我想更好的方法是在字典中添加数量,如下所示:

Dictionary<string, Dictionary<string, int>> usedCars = new Dictionary<string, Dictionary<string, int>>();
for(int i=0; i<UsedCars.GetLength(0); i++)
{
    string brand = UsedCars[i, 0].ToString();
    string color = UsedCars[i, 1].ToString();
    int quantity = (int)UsedCars[i,2];

    if (!usedCars.ContainsKey(brand))
        usedCars.Add(brand, new Dictionary<string, int>());

    if (usedCars[brand].ContainsKey(color))
        usedCars[brand][color] += quantity;
    else
        usedCars[brand][color] = quantity;
}

我认为您向我们展示的品牌,颜色和数量是object[10,5]数组中每个“行”的前三个“单元格”。

生成的字典可以像这样使用:

Console.WriteLine($"Quantity of yellow ferraris: {usedCars["Ferrari"]["Yellow"]}");