Linq查询到SortedList <int,list <int>&gt; </int,list <int>

时间:2012-11-21 02:01:38

标签: c# .net linq c#-4.0 linq-to-sql

我目前正在使用Linq从我的数据表中检索不同值的列表。然后我循环遍历列表并再次调用linq查询来检索每个值的列表 第一个列表中的值。

_keyList = new SortedList<int, List<int>>();
var AUGroupList = ProcessSummaryData.AsEnumerable()
                  .Select(x => x.Field<int>("AUGroupID"))
                  .Distinct()
                  .ToList<int>();
foreach (var au in AUGroupList)
{
    var AUList = ProcessSummaryData.AsEnumerable()
                      .Where(x => x.Field<int>("AUGroupID") == au)
                      .Select(x => x.Field<int>("ActivityUnitID"))
                      .ToList<int>();
    _keyList.Add(au, AUList);
}

然后我将值添加到排序列表以及相应的第二个列表。 如何将上述两个查询合并到一个Linq查询中,以便我不必单独调用它们?

2 个答案:

答案 0 :(得分:2)

您应该可以执行以下操作:

var groupQuery = from d in ProcessSummary.AsEnumerable()
                 group d by new { Key = d.Field<int>("AUGroupID") } into g
                 select new { GroupID = g.Key, Values = g.Distinct().ToList() }; 

然后,您可以遍历groupQuery并填充已排序的列表。 Key属性将包含组ID,Values属性将具有不同的值列表。

答案 1 :(得分:1)

你试过这个吗?

var _keyList = new SortedList<int, List<int>>();
var AUGroupList = ProcessSummaryData.AsEnumerable()
                  .Select(x => x.Field<int>("AUGroupID"))
                  .Distinct()
                     .Where(x => x.Field<int>("AUGroupID") == au)
                     .Select(x => x.Field<int>("ActivityUnitID"))
                     .ToList<int>();
    _keyList.Add(au, AUList);
}

您的提供商应该应对这种情况,如果不是,还有其他一些方法。