0

问题的背景

假设我有以下两个列表(prioSums 和 contentVals)从 SQL Server CE 查询编译,如下所示:

var queryResults = db.Query(searchQueryString, searchTermsArray);

Dictionary<string, double> prioSums = new Dictionary<string, double>();
Dictionary<string, string> contentVals = new Dictionary<string, string>();
double prioTemp = 0.0;
foreach(var row in queryResults)
{
    string location = row.location;
    double priority = row.priority;

    if (!prioSums.ContainsKey(location))
    {
        prioSums[location] = 0.0;
    }

    if (!contentVals.ContainsKey(location))
    {
        contentVals[location] = row.value;
        prioTemp = priority;
    }

    if (prioTemp < priority)
    {
        contentVals[location] = row.value;
    }

    prioSums[location] += priority;
}

查询本身非常大,非常动态地编译,并且确实超出了这个问题的范围,所以我只会说它返回包含优先级、文本值和位置的行。

使用上面的代码,我可以获得一个列表(prioSums),它总结了每个位置的所有优先级(不允许在位置 [key] 本身上重复,即使该位置的重复在查询结果中),并且另一个列表(contentVals)保存具有最高优先级的位置的值,再次使用该位置作为键。

所有这些我都完成了,而且效果很好。我可以遍历这两个列表并显示我想要的信息但是......

问题

...现在我需要首先将这些列表与最高优先级(或存储为 prioSums 中的值的优先级总和)一起重新排序。

我已经绞尽脑汁试图考虑使用具有三个属性的实例化类作为其他人的建议,但考虑到我的 WebMatrix C#.net-webpages 环境,我似乎无法理解它是如何工作的。我知道如何.cs从当前.cshtml文件中的文件中调用一个类,没问题,但我以前从未通过实例化一个类使其成为对象来做到这一点(对不起,对于一些更复杂的 C# 逻辑/方法仍然是新的) .

谁能建议如何做到这一点,或者展示一种更简单(至少更容易理解)的方式来做到这一点?简而言之,我真正需要的是这两个列表按 prioSums 中的值从最高到最低排序。

笔记

如果我没有提供足够的信息,请原谅我。如果应该提供更多,请不要犹豫。

此外,有关此问题的更多信息或背景,您可以在此处查看我之前的问题:是否有任何方法可以遍历我的 sql 结果并将某些名称/值对存储在 C# 的其他位置?

4

1 回答 1

1

我不知道它是否是您想要的结果,但您可以尝试一下:

var result = from p in prioSums
          orderby p.Value descending
          select new { location = p.Key, priority = p.Value, value = contentVals[p.Key] };
于 2013-07-18T17:00:26.060 回答