【发布时间】:2015-09-11 21:00:09
【问题描述】:
我正在尝试使用 LINQ 过滤此类List<Dictionary<String, Object>> 的列表,但我找不到方法。
我有这个代码:
private List<Dictionary<String, Object>> ValidateScenarioProductItemData(List<Dictionary<String, Object>> pList)
{
foreach (var tItem in pList)
{
if (!string.IsNullOrEmpty(tItem["IsInternal"].ToString()))
{
var i = 0;
foreach (var item in tPeriods)
{
i++;
var tHasSails = tCycleProductItemSales.Where(
CPIS => CPIS.CycleId == Convert.ToInt32(tItem["CycleId"].ToString()) &&
CPIS.ProductItemId == Convert.ToInt32(tItem["ProductItemId"].ToString()) &&
CPIS.PeriodId == Convert.ToInt32(item.Id.ToString()));
if (tHasSails.Count() == 0)
{
tItem[string.Format("Datasource{0}Id", i)] = 0;
}
}
}
}
return pList;
}
我想在 foreach 中过滤 pList 以避免通过键 IsInternal 避免询问下一个 if 并避免不必要的调用。
我已经尝试过了,但它不起作用: Filtering out values from a C# Generic Dictionary
【问题讨论】:
-
什么是
tPeriods?就这样我做对了:您想将必须的代码转换为 linq? -
不回答您的问题但使用
tHasSails.Count将枚举整个集合。如果您只对集合是否有任何元素感兴趣,请改用IEnumerable..Any。 -
对不起所有 pPeriods 是我需要的全局值
-
这是非常低效的代码...O(n^2) 和大量装箱/拆箱...而且字典列表也不是很有用(现在搜索是 O(n))。 ..尝试转换(如果可能)字典的键以解释列表中的变化....