问题的背景
假设我有一个从SQL Server CE查询编译的以下两个列表(prioSums和contentVals),如下所示:
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-来了解我的大脑是如何工作的。网页环境。我知道如何从当前.cs
文件中的.cshtml
文件调用一个类,没问题,但是我从来没有通过实例化一个类来使它成为一个对象(抱歉,还是新的一些更复杂的C#逻辑/方法论。)
任何人都可以建议如何实现这一目标,或者展示一种更容易(至少更容易理解)的方式吗?总之,我真正需要的是这两个列表按prioSums中的值从最高到最低排序。
注意
如果我没有提供足够的信息,请原谅我。如果提供更多信息,请不要犹豫。
此外,有关此问题的更多信息或背景信息,您可以在此处查看我之前的问题:Is there any way to loop through my sql results and store certain name/value pairs elsewhere in C#?
答案 0 :(得分:1)
我不知道你想要的结果,但你可以尝试一下:
var result = from p in prioSums
orderby p.Value descending
select new { location = p.Key, priority = p.Value, value = contentVals[p.Key] };